【程序員眼中的統計學(1)】信息圖形化:第一印象

信息圖形化:第一印象

作者 白寧超
2015年10月13日23:23:13

摘要:程序員眼中的統計學系列是作者和團隊共同學習筆記的整理。首先提到統計學,很多人認為是經濟學或者數學的專利,與計算機并沒有交集。誠然在傳統學科中,其在以上學科發揮作用很大。然而隨著科學技術的發展和機器智能的普及,統計學在機器智能中的作用越來越重要。本系列統計學的學習基于《深入淺出統計學》一書(偏向代碼實現,需要讀者有一定基礎,可以參見后面PPT學習)。正如(吳軍)先生在《數學之美》一書中闡述的,基于統計和數學模型對機器智能發揮重大的作用。諸如:語音識別、詞性分析、機器翻譯等世界級的難題也是從統計中找到開啟成功之門鑰匙的。尤其是在自然語言處理方面更顯得重要,因此,對統計和數學建模的學習是尤為重要的。最后感謝團隊所有人的參與。( 本文原創,轉載注明出處信息圖形化:第一印象? )

?目錄


【程序員眼中的統計學(1)】 信息圖形化:第一印象

【程序員眼中的統計學(2)】集中趨勢度量:分散性、變異性、強大的距

【程序員眼中的統計學(3)】概率計算:把握機會

【程序員眼中的統計學(4)】離散概率分布的運用:善用期望

【程序員眼中的統計學(5)】排列組合:排序、排位、排

【程序員眼中的統計學(6)】幾何分布、二項分布及泊松分布:堅持離散

【程序員眼中的統計學(7)】正態分布的運用:正態之美

【程序員眼中的統計學(8)】統計抽樣的運用:抽取樣本

【程序員眼中的統計學(9)】總體和樣本的估計:進行預測

【程序員眼中的統計學(10)】假設檢驗的運用:研究證據

【程序員眼中的統計學(11)】卡方分布的應用

【程序員眼中的統計學(12)】相關與回歸:我的線條如何?

0 引言


在大學時期我打了三年的暑假工,我的工作就是檢測數碼產品的屏幕的油墨厚度,每天都有好幾萬的數據報表,面對著這大量的待處理數據,我們就利用了圖表來進行統計。

?

1 餅圖算法描述


1.1?餅圖算法基本描述

在介紹餅圖之前我們先來看一張表格:

上圖是表示某公司在下半年中每月的利潤情況。

就這張表格而言,我們只能知道各個月份的利潤,卻無法知道每個月份占總利潤的比例,根據這張表格我們畫出了兩張圖,如下:

我們從圖中很容易可以得到兩個信息:第一幅圖看起來數據相差不大,第二幅圖看起來數據相差非常大,對于同一張表所畫出的兩張圖為什么會有兩種截然不同的見解呢?

其實會發生上述不同的觀點主要是因為這兩張圖的縱軸和標度不一樣,第一張圖縱軸的起點是0,標度是0.5,而第二張圖的縱軸的起點是2.0,標度是0.1。那么什么是標度呢?

標度:標度是指圖形縱軸上每段的大小。

數據:不添加任何修飾成分的原始事實與數字,比如說:對、錯;123??

信息:是指加入了某種修飾成分的數據,比如說:這個答案是對的;這個小孩3歲?。

前面的準備工作做完了,那么我們現在來看看什么叫餅圖吧。

餅圖為圓形,被分割為幾個扇形塊,每一塊代表一個組(類),扇形塊的大小表示這類數據占總體的比例即頻數。

頻數:一個特定組中的對象數目稱為頻數。

餅圖將整個數據計劃分為幾個互不相干的組。這意味著,如果把每個扇形塊的頻數加起來,結果應為100%

請根據餅圖的定義將下面這張表格轉化為餅圖:

下面總結餅圖的優缺點及應用場景:

優點:在進行比例比較的時候,可以一眼看出哪個組具有較高的頻數。

缺點:當每種類型的比例大小相差不大時,我們很難根據扇形塊的大小來比較頻數的高低。

應用場景:根據扇形的優缺點我們可以知道,扇形只能適用于比例相差較大的情況下頻數的比較。

該算法是在給定一些數據集的情況下繪制出符合該數據集的餅圖。

  1. 定義:餅圖是將圓形分割為幾個扇形塊,每一塊代表一個組(類),扇形塊的大小表示這類數據占總體的比例。
  2. 符號解釋:無。
  3. 具體計算方法:該算法是利用JFreeChart里的jar包里的類和方法來繪制餅圖的。

1.2算法的應用場景

在需要繪制餅圖的時候使用該算法。

1.3算法的優缺點

  • 優點是可以很快速的建立一個餅圖;
  • 缺點是無法直接從餅圖中看出各部分所占的比例。

1.4算法的輸入輸出(Java代碼實現)

輸入:

* @param  Panel_Pictuer's name  string 表示面板名稱  My Pie Chart* @param  Pie_Pictuer's name  string 表示圖形名稱  Pie Chart* @param  x_name  string 表示各類名稱  One Two Three Four Five Six ##* @param  y_size  double  表示各類的頻數  23 34 25 31 30 28 0

java代碼實現:

package pictuer;
import java.awt.Dimension;
import java.awt.font.TextAttribute;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class PieChartDemo8 extends ApplicationFrame
{	/*** 設置餅圖各小塊的個數*  @return 餅圖各小塊的個數* @author bnc **/static class CustomLabelGenerator implements PieSectionLabelGenerator{public String generateSectionLabel(PieDataset piedataset, Comparable comparable){String s = null;if (piedataset != null && !comparable.equals("Two"))s = comparable.toString();return s;}/*** @return 返回裝載圖片的圖形構造*/public AttributedString generateAttributedSectionLabel(PieDataset piedataset, Comparable comparable){AttributedString attributedstring = null;String s = comparable.toString();String s1 = (new StringBuilder()).append(s).append(" : ").append(String.valueOf(piedataset.getValue(comparable))).toString();attributedstring = new AttributedString(s1);attributedstring.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, 0, s.length() - 1);return attributedstring;}CustomLabelGenerator(){}}/** 構造函數,創建面板用來存放圖片* @parame s 表示面板的名稱*/public PieChartDemo8(String s){super(s);JPanel jpanel = createDemoPanel();//jpanel  創建面板的名稱jpanel.setPreferredSize(new Dimension(500, 270));setContentPane(jpanel);}/*** 獲得繪制餅圖所需的數據* @return 繪制餅圖所需的數據集*/private static PieDataset createDataset(){DefaultPieDataset defaultpiedataset = new DefaultPieDataset();//defaultpiedataset 裝載餅圖所需數據的數據集List<String> list_name=new ArrayList<String>();//list_name 裝載直方圖各小塊區間的容器list_name.add("One");list_name.add("Two");list_name.add("Three");list_name.add("Four");list_name.add("Five");int n=5;List<String> li_name=list_name;//li_name 存放餅圖各小塊名稱的容器List<Double> list_size=new ArrayList<Double>();//list_size 裝載條形圖各小塊頻數的容器list_size.add(23.0);list_size.add(13.0);list_size.add(25.0);list_size.add(12.0);list_size.add(18.0);List<Double> li_size=list_size;//li_size 存放餅圖各小塊頻數的容器for(int i=0;i<n;i++){defaultpiedataset.setValue(li_name.get(i),new Double(li_size.get(i)));//存放數據}return defaultpiedataset;}/*** 創建餅圖* @return 返回餅圖*/private static JFreeChart createChart(PieDataset piedataset,String Pie_Name){JFreeChart jfreechart = ChartFactory.createPieChart(Pie_Name, piedataset, false, true, false);//jfreechart  圖形變量,用來裝載圖形PiePlot pieplot = (PiePlot)jfreechart.getPlot();pieplot.setLabelGenerator(new CustomLabelGenerator());return jfreechart;}/*** 創建餅圖面板* @return 返回餅圖面板*/public static JPanel createDemoPanel(){String Pie_name;Pie_name="My Chart";JFreeChart jfreechart = createChart(createDataset(),Pie_name);//jfreechart 圖形變量,通過圖形數據和圖形名稱創建圖形return new ChartPanel(jfreechart);}	public static void main(String args[]){/*** 繪制餅圖* @author cuit* @return 返回餅圖*/String Panel_name;Panel_name="My Chart";PieChartDemo8 piechartdemo8 = new PieChartDemo8(Panel_name);//piechartdemo8   構造方法實例變量piechartdemo8.pack();RefineryUtilities.centerFrameOnScreen(piechartdemo8);piechartdemo8.setVisible(true);}
}

?輸出結果:

?

1.5 導致算法異常

當y_size輸入的個數大于x_name的個數會導致異常,系統會自動的將y_size多余的數值剔除掉

1.6 代碼的算法參考

類源碼:見源程序:Panel.?src.?All_Pictuer.?PieChartDemo8

本算法是通過輸入繪制餅圖的數據集來繪制出餅圖的具體實現。

類和方法調用接口

見源程序:Panel.?src.?All_Pictuer.?PieChartDemo8

PieChartDemo8.java?下包含如下方法:

getN_name()???//得到餅圖各小塊的個數

setN_name(int?n_name)??//設置餅圖各小塊的個數

Input_Name()???//輸入餅圖各小塊的名稱

Input_Size()????//輸入餅圖各小塊的頻數

generateAttributedSectionLabel(PieDataset?piedataset,?Comparable?comparable)??//裝載圖片的圖形構造

PieChartDemo8(String?s)??//構造函數,創建面板用來存放圖片

createDataset()???//獲得繪制餅圖所需的數據

createChart(PieDataset?piedataset,String?Pie_Name)???//創建餅圖

createDemoPanel()???//創建餅圖面板

2?條形圖算法描述


2.1?條形圖算法基本描述

條形圖

通過前面我們知道了餅圖的基本特征,那么請看看下面這張餅圖有什么問題吧。

這個餅圖的問題就在于很難一眼看出哪一類玩家的滿意度最高。用于扇形塊所占整體比例無關的百分數來標識餅圖通常也會讓人犯暈,例如,“體育”塊標示著99%,但這一塊在餅圖中所占的比例僅為20%左右。另一個問題是,我們不知道每種游戲的反饋數目是否相等,因此也無法知道用這種方式對滿意度進行比較是否公正。

餅圖的作用是對不同組(或者類)所占的比例進行比較,但在這個例子中,各個組的比例相差無幾,這就是餅圖失效的地方,那么究竟什么圖可以完成這種情況呢?那么我們就得引入條形圖了。

條形圖:條形圖是用一個一個間隔的長方形來表示的,每一個長方形代表一個特定的類,長方形的長度代表某種數值。長方形越長,數值越大,所有長方形的寬都是相等的。

?垂直條形圖

條形圖分為垂直條形圖和水平條形圖兩種,下面我們就來看看垂直條形圖的具體畫法:

水平條形圖

同樣是將上面的表格轉換成水平條形圖(水平條形圖跟垂直條形圖相比,只是坐標軸調換了一下而已)

在一般情況下,我們經常用垂直條形圖,但在類名稱太長的時候,水平條形圖就有用了----你將有大量空白位置標示每個類的名稱,不用橫七豎八的進行擺布。

百分度標度:類的數目的大小是用百分數來表示的。

在使用百分度標度時,一定要設法指出頻數-----或是將頻數標在圖形中間,或是標在圖形旁邊。

頻數標度:類的數目的大小是用數字而非百分數表示的。

在使用頻數標度時,一定要小心縱軸的起點,通常縱軸的起點是從0開始,不過當使用不以0為起點的縱軸可以讓數據給人不同的第一印象。

堆積條形圖

堆積條形圖:將同一種類的不同的屬性分別用兩個相連的的長方形在一張條形圖

下面總結堆積條形圖的優缺點及應用場景: 優點:黨比表同一種類的不同屬性的頻數的時候很簡單明了。

缺點:很難看出某個類的比例和屬性的比例。

應用場景:同一個類有多個屬性而我們只需比較不同屬性之間的頻數

分段條形圖

分段條形圖:將同一種類的不同的屬性分段在一個長方形上展示

?

下面總結分段條形圖的優缺點及應用場景:

優點:可以很清晰的看出每個類的總和和各個屬性的比例。

缺點:不容易看出各個屬性的頻數。

應用場景:同一個類有多個屬性而我們需要比較各個類的比較或不同屬性之間的比例。

該算法是在給定一些數據集的情況下繪制出符合該數據集的條形圖。

  1. 定義:條形圖是用一個一個間隔的長方形來表示的,每一個長方形代表一個特定的類,長方形的長度代表某種數值。
  2. 符號解釋:無。
  3. 具體計算方法:該算法是利用JFreeChart里的jar包里的類和方法來繪制條形圖的。

2.2算法的應用場景

在需要繪制條形圖的時候使用該算法。

2.3算法的優缺點

  • 優點是可以很快速的建立一個條形圖;
  • 缺點是所輸入的各小塊的名稱時必須得轉化成Year類型。

2.4算法的輸入輸出

輸入量:

*?@param??Panel's?name??string?表示面板名稱??My?Chart

*?@param??Pictuer's?name??string?表示圖形名稱??Chart

*?@param??x_name??double?表示各類名稱??1?2?3?4?5?6?0

*?@param??y_size??double??表示各類的頻數?23?34?25?31?30?28?0

java代碼實現:

package pictuer;
import java.awt.Dimension;
import java.awt.Font;
import java.io.PrintStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.*;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class XYBarChartDemo1 extends ApplicationFrame
{/*** 構造函數,用來創建面板用來存放圖片* @param s 表示面板的名稱*/public XYBarChartDemo1(String s){super(s);JPanel jpanel = createDemoPanel();//jpanel  創建面板的名稱jpanel.setPreferredSize(new Dimension(500, 270));setContentPane(jpanel);}/*** 創建條形圖* @param intervalxydataset  數周數據生成變量,用來存放數軸數據* @return 返回條形圖*/private static JFreeChart createChart(IntervalXYDataset intervalxydataset,String Pictuer_name){//System.out.println("請輸入該圖片的名稱(類型是String):");//Scanner input = new Scanner(System.in);//input 輸入流變量,存放從鍵盤輸入的字符串//String Pictuer_name=input.nextLine();//Pictuer_name 字符串變量,用來存放條形圖的名稱JFreeChart jfreechart = ChartFactory.createXYBarChart(Pictuer_name, "Year", true, "Number of People", intervalxydataset, PlotOrientation.VERTICAL, true, false, false);//jfreechart  圖形變量,用來裝載圖形XYPlot xyplot = (XYPlot)jfreechart.getPlot();//xyplot  數軸變量,用來存放和設置數軸的信息XYBarRenderer xybarrenderer = (XYBarRenderer)xyplot.getRenderer();//xybarrenderer  圖形方塊變量StandardXYToolTipGenerator standardxytooltipgenerator = new StandardXYToolTipGenerator("{1} = {2}", new SimpleDateFormat("yyyy"), new DecimalFormat("0"));//standardxytooltipgenerator 數周數據生成變量,用來存放數軸數據xybarrenderer.setBaseToolTipGenerator(standardxytooltipgenerator);xybarrenderer.setMargin(0.10000000000000001D);DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();//dateaxis 數值變量,用來設置數軸的數值的 dateaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);dateaxis.setLowerMargin(0.01D);dateaxis.setUpperMargin(0.01D);ChartUtilities.applyCurrentTheme(jfreechart);return jfreechart;}/*** 獲得繪制條形圖所需的數據* @return 繪制條形圖所需的數據集*/private static IntervalXYDataset createDataset(){List<Integer> list_name=new ArrayList<Integer>();//list_name 裝載直方圖各小塊區間的容器list_name.add(1);list_name.add(2);list_name.add(3);list_name.add(4);list_name.add(5);int n=5;TimeSeries timeseries = new TimeSeries("Executions", "Year", "Count");//timeseries  時間變量,存放數據時間的List<Integer> li_name=list_name;//li_name 存放條形圖各小塊區間的容器List<Double> list_size=new ArrayList<Double>();//list_size 裝載條形圖各小塊頻數的容器list_size.add(23.0);list_size.add(13.0);list_size.add(25.0);list_size.add(12.0);list_size.add(18.0);List<Double> li_size=list_size;//li_size 存放條形圖各區間頻數的容器for(int i=0;i<n;i++){try{timeseries.add(new Year(li_name.get(i)), new Double(li_size.get(i)));}catch (Exception exception){System.err.println(exception.getMessage());}//拋異常}TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(timeseries);//timeseriescollection  時間數集變量return timeseriescollection;}/*** 得到條形圖各小塊的個數* @return 直方圖各小塊的個數*//*** 設置條形圖各小塊的個數* @return 直方圖各小塊的個數*//*** 創建條形圖面板* @param ChartPanel 圖形面板變量* @return 返回直方圖面板*/public static JPanel createDemoPanel(){String Pictuer_name;Pictuer_name="Chart";return new ChartPanel(createChart(createDataset(),Pictuer_name));}public static void main(String args[]){/*** 繪制條形圖* @author cuit* @return 返回直方圖*/String panel_name;panel_name="My Chart";XYBarChartDemo1 xybarchartdemo1 = new XYBarChartDemo1(panel_name);//xybarchartdemo1   構造方法實例變量xybarchartdemo1.pack();RefineryUtilities.centerFrameOnScreen(xybarchartdemo1);xybarchartdemo1.setVisible(true);}
}

?輸出:

?

2.5導致算法異常

當y_size輸入的個數大于x_name的個數會導致異常,系統會自動的將y_size多余的數值剔除掉

2.6代碼的算法參考

類源碼:見源程序:Panel.?src.?All_Pictuer.?XYBarChartDemo1

本算法是通過輸入繪制條形圖的數據集來繪制出餅圖的具體實現。

類和方法調用接口

見源程序:Panel.?src.?All_Pictuer.?XYBarChartDemo1

XYBarChartDemo1.java?下包含如下方法:

getN_name()???//得到條形圖各小塊的個數

setN_name(int?n_name)??//設置條形圖各小塊的個數

Input_Name()???//輸入條形圖各小塊的名稱

Input_Size()????//輸入條形圖各小塊的頻數

XYBarChartDemo1(String?s)??//構造函數,創建面板用來存放圖片

createDataset()??//獲得繪制條形圖所需的數據

createChart(IntervalXYDataset?intervalxydataset)??//創建條形圖

createDemoPanel()???//創建條形圖面板

3?直方圖算法描述


3.1?直方圖算法基本描述

該算法是在給定一些數據集的情況下繪制出符合該數據集的直方圖。

  1. 定義:直方圖是用一個一個連續的長方形來表示的,每一個長方形代表一個特定的類,長方形的長度代表某種數值。
  2. 符號解釋:無。
  3. 具體計算方法:該算法是利用JFreeChart里的jar包里的類和方法來繪制直方圖的。

3.2算法的應用場景

在需要繪制直方圖的時候使用該算法。

3.3算法的優缺點

  • 優點是可以很快速的建立一個直方圖
  • 缺點是無法自由設置縱軸的標度。

3.4算法的輸入輸出

輸入:

*?@param??panel's?name??string?表示面板名稱??My?Chart

*?@param??histograme's?name??string?表示圖形名稱??Chart

*?@param??x's?name??string??表示x軸的名稱??My?X

*?@param??x_QuJian??double?表示各類名稱??1?2?3?4?5?6?0

*?@param??y_size??double??表示各類的頻數?23?34?25?31?30?28?0

java代碼實現:

package pictuer;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.data.statistics.SimpleHistogramBin;
import org.jfree.data.statistics.SimpleHistogramDataset;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class HistogramDemo2 extends ApplicationFrame
{/*** 構造函數,用來創建面板用來存放圖片* @param s 表示面板的名稱*/public HistogramDemo2(String s){super(s);JPanel jpanel = createDemoPanel();//jpanel  創建面板的名稱jpanel.setPreferredSize(new Dimension(500, 270));setContentPane(jpanel);}/*** 得到直方圖各小塊的個數* @return 直方圖各小塊的個數*//*** 獲得繪制直方圖所需的數據 * @return 繪制餅圖所需的數據集*/private static IntervalXYDataset createDataset(){String x_name;x_name="X_Name";SimpleHistogramDataset simplehistogramdataset = new SimpleHistogramDataset(x_name);//simplehistogramdataset 裝載直方圖所需數據的數據集List<Double> list_size=new ArrayList<Double>();//list_size 裝載條形圖各小塊頻數的容器list_size.add(9.0);list_size.add(10.0);list_size.add(11.0);list_size.add(12.0);list_size.add(13.0);int n=5;List<Double> l_qujian=list_size;//l_qujian 存放直方圖各小塊區間的容器List<Integer> list_name=new ArrayList<Integer>();//list_name 裝載直方圖各小塊區間的容器list_name.add(23);list_name.add(12);list_name.add(56);list_name.add(32);list_name.add(22);List<Integer> l_size=list_name;//l_size 存放直方圖各區間頻數的容器for(int i=0;i<n-1;i++){SimpleHistogramBin simplehistogrambin = new SimpleHistogramBin(l_qujian.get(i),l_qujian.get(i+1), true, false);//simplehistogrambin  圖形變量simplehistogrambin.setItemCount(l_size.get(i));simplehistogramdataset.addBin(simplehistogrambin);}return simplehistogramdataset;}/*** 創建直方圖* @param intervalxydataset 裝載直方圖所需數據的數據集* @return 返回直方圖*/private static JFreeChart createChart(IntervalXYDataset intervalxydataset){String h_name;h_name="Y_Name";JFreeChart jfreechart = ChartFactory.createHistogram(h_name, null, null, intervalxydataset, PlotOrientation.VERTICAL, true, true, false);//jfreechart  圖形變量,用來裝載圖形XYPlot xyplot = (XYPlot)jfreechart.getPlot();//xyplot  數軸變量,用來存放和設置數軸的信息xyplot.setForegroundAlpha(0.85F);xyplot.setDomainPannable(true);xyplot.setRangePannable(true);NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();//numberaxis 數值變量,用來設置數軸的數值的numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());XYBarRenderer xybarrenderer = (XYBarRenderer)xyplot.getRenderer();//xybarrenderer  圖形方塊變量xybarrenderer.setDrawBarOutline(false);return jfreechart;}/*** 創建直方圖面板 * @return 返回直方圖面板*/public static JPanel createDemoPanel(){JFreeChart jfreechart = createChart(createDataset());//jfreechart 圖形變量,通過圖形數據和圖形名稱創建圖形ChartPanel chartpanel = new ChartPanel(jfreechart);//chartpanel 圖形面板變量chartpanel.setMouseWheelEnabled(true);return chartpanel;}public static void main(String args[]){/*** 繪制直方圖* @author cuit* @return 返回直方圖*/String panel_name;panel_name="My Chart";HistogramDemo2 histogramdemo2 = new HistogramDemo2(panel_name);//histogramdemo2   構造方法實例變量histogramdemo2.pack();RefineryUtilities.centerFrameOnScreen(histogramdemo2);histogramdemo2.setVisible(true);}
}

?

輸出:

?

3.5導致算法異常

當y_size輸入的個數大于x_QuJian的個數會導致異常,系統會自動的將y_size多余的數值剔除掉。

3.6代碼的算法參考

類源碼:見源程序:Panel.?src.?All_Pictuer.?HistogramDemo2

本算法是通過輸入繪制直方圖的數據集來繪制出餅圖的具體實現。

類和方法調用接口

見源程序:Panel.?src.?All_Pictuer.?HistogramDemo2

HistogramDemo2.java?下包含如下方法:

getN_qujian()??//得到直方圖各小塊的個數

setN_qujian(int?n_qujian)??//設置直方圖各小塊的個數

Input_QuJian()???//輸入直方圖各小塊的區間

Input_Size()????//輸入直方圖各小塊的頻數

HistogramDemo2(String?s)??//構造函數,創建面板用來存放圖片

createDataset()??//獲得繪制直方圖所需的數據

createChart(IntervalXYDataset?intervalxydataset)???//創建直方圖

createDemoPanel()???//創建直方圖面板

4?折線圖算法描述


4.1?折線圖算法基本描述

當我們在處理存在負增長的數據時我們就不能用累計頻數圖了,因為累計頻數圖永遠都是增長的,那么這個時候我們就該用到折線圖了。

折線圖:用來體現數據型數據的發展趨勢的。

那么我們現在來看一下根據下面的這張表轉換成折線圖的畫法吧。

該算法是在給定一些數據集的情況下繪制出符合該數據集的折線圖。

  1. 定義:折線圖用來體現數據型數據的發展趨勢的。
  2. 符號解釋:無。
  3. 具體計算方法:該算法是利用JFreeChart里的jar包里的類和方法來繪制折線圖的。

4.2算法的應用場景

在需要繪制折線圖的時候使用該算法。

4.3算法的優缺點

  • 優點是可以很快速的建立一個折線圖
  • 缺點是所輸入的各小塊的名稱時必須得轉化成Year類型。

4.4算法的輸入輸出

輸入:

*?@param??Panel's?name??string?表示面板名稱??My?Chart

*?@param??Classes's?name??string?表示類名稱??Chart

*?@param??pictuer's?name??string??表示圖形名稱??Pictuer?Chart

*?@param??y's?name??string??表示y軸的名稱??Chart?Y

*?@param??x's?name??string??表示x軸的名稱??My?X

*?@param??x_name??string?表示各類名稱??1?2?3?4?5?6?##

*?@param??y_size??double??表示各類的頻數?23?34?25?31?30?28?0

java代碼實現:

package pictuer;
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.*;
public class LineChartDemo1 extends ApplicationFrame
{/*** 構造函數,用來創建面板用來存放圖片* @param s 表示面板的名稱*/public LineChartDemo1(String s){super(s);JPanel jpanel = createDemoPanel();//jpanel  創建面板的名稱jpanel.setPreferredSize(new Dimension(500, 270));setContentPane(jpanel);}/*** 獲得繪制折線圖所需的數據* @return 繪制餅圖所需的數據集*/private static CategoryDataset createDataset(){DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();//defaultcategorydataset 裝載折線圖所需數據的數據集List<String> list_name=new ArrayList<String>();//list_name 裝載直方圖各小塊區間的容器list_name.add("One");list_name.add("Two");list_name.add("Three");list_name.add("Four");list_name.add("Five");int n=5;List<String> li_name=list_name;//li_name 存放折線圖各點的容器List<Double> list_size=new ArrayList<Double>();//list_size 裝載條形圖各小塊頻數的容器list_size.add(23.0);list_size.add(13.0);list_size.add(25.0);list_size.add(12.0);list_size.add(18.0);List<Double> li_size=list_size;//li_size 存放折線圖各點頻數的容器String Classess_name;Classess_name="Class";for(int i=0;i<n;i++){defaultcategorydataset.addValue(new Double(li_size.get(i)),Classess_name,li_name.get(i));//存放數據}return defaultcategorydataset;}/*** 創建折線圖* @param categorydataset 裝載折線圖所需數據的數據集* @return 返回直方圖*/private static JFreeChart createChart(CategoryDataset categorydataset){String Pictuer_name;Pictuer_name="My Chart";String y_name;y_name="Chart";JFreeChart jfreechart = ChartFactory.createLineChart(Pictuer_name, null,y_name, categorydataset, PlotOrientation.VERTICAL, false, true, false);//jfreechart  圖形變量,用來裝載圖形CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();//categoryplot  數軸變量,用來存放和設置數軸的信息categoryplot.setRangePannable(true);categoryplot.setRangeGridlinesVisible(false);NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();//numberaxis 數值變量,用來設置數軸的數值的numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());ChartUtilities.applyCurrentTheme(jfreechart);LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();//lineandshaperenderer  圖形方塊變量lineandshaperenderer.setBaseShapesVisible(true);lineandshaperenderer.setDrawOutlines(true);lineandshaperenderer.setUseFillPaint(true);lineandshaperenderer.setBaseFillPaint(Color.white);lineandshaperenderer.setSeriesStroke(0, new BasicStroke(3F));lineandshaperenderer.setSeriesOutlineStroke(0, new BasicStroke(2.0F));lineandshaperenderer.setSeriesShape(0, new java.awt.geom.Ellipse2D.Double(-5D, -5D, 10D, 10D));return jfreechart;}/*** 創建折線圖面板* @return 返回折線圖面板*/public static JPanel createDemoPanel(){JFreeChart jfreechart = createChart(createDataset());//jfreechart 圖形變量,通過圖形數據和圖形名稱創建圖形ChartPanel chartpanel = new ChartPanel(jfreechart);//chartpanel 圖形面板變量chartpanel.setMouseWheelEnabled(true);return chartpanel;}public static void main(String args[]){/*** 繪制折線圖* @author cuit* @return 返回直方圖*/String Panel_name;Panel_name="Chart";LineChartDemo1 linechartdemo1 = new LineChartDemo1(Panel_name);//linechartdemo1   構造方法實例變量linechartdemo1.pack();RefineryUtilities.centerFrameOnScreen(linechartdemo1);linechartdemo1.setVisible(true);}
}

?輸出:

?

4.5導致算法異常

當y_size輸入的個數大于x_name的個數會導致異常,系統會自動的將y_size多余的數值剔除掉

4.6代碼的算法參考

類源碼:見源程序:Panel.?src.?All_Pictuer.?LineChartDemo1

本算法是通過輸入繪制折線圖的數據集來繪制出餅圖的具體實現。

類和方法調用接口

見源程序:Panel.?src.?All_Pictuer.?LineChartDemo1

LineChartDemo1.java?下包含如下方法:

getN_name()??//得到折線圖點的個數

setN_name(int?n_name)??//設置直折線圖點的個數

Input_Name()???//輸入折線圖各點的區間

Input_Size()????//輸入折線圖各點的頻數

LineChartDemo1(String?s)??//構造函數,創建面板用來存放圖片

createDataset()??//獲得繪制折線圖所需的數據

createChart(CategoryDataset?categorydataset)???//創建折線圖

createDemoPanel()???//創建折線圖面板

5?箱線圖算法描述


5.1?箱線圖算法基本描述

該算法是在給定一些數據集的情況下繪制出符合該數據集的箱線圖。

  1. 定義:箱線圖是用來顯示數據的全距、四分位距以及中位數的圖形。
  2. 符號解釋:無。
  3. 具體計算方法:該算法是利用JFreeChart里的jar包里的類和方法來繪制箱線圖的。

5.2算法的應用場景

在需要繪制箱線圖的時候使用該算法。

5.3算法的優缺點

優點是可以很快速的建立一個箱線圖。

5.4算法的輸入輸出

輸入:

*?@param??panel's?name??string?表示面板名稱?My?Chart

*?@param??x's?name??string?表示x軸名稱??My?X

*?@param??y's?name??string?表示y軸名稱??My?Y

*?@param??the?max??double??表示最大值??1

*?@param??the?min??double??表示最小值??33

*?@param??the?under_four??double??表示下四分位數??10

*?@param??the?over_four???double??表示上四分位數??15

*?@param??Pictuer's?name??string?表示圖片名稱??Chart

java代碼實現:

package pictuer;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYBarRenderer;
import org.jfree.data.statistics.SimpleHistogramBin;
import org.jfree.data.statistics.SimpleHistogramDataset;
import org.jfree.data.xy.IntervalXYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class HistogramDemo2 extends ApplicationFrame
{/*** 構造函數,用來創建面板用來存放圖片* @param s 表示面板的名稱*/public HistogramDemo2(String s){super(s);JPanel jpanel = createDemoPanel();//jpanel  創建面板的名稱jpanel.setPreferredSize(new Dimension(500, 270));setContentPane(jpanel);}/*** 得到直方圖各小塊的個數* @return 直方圖各小塊的個數*//*** 獲得繪制直方圖所需的數據 * @return 繪制餅圖所需的數據集*/private static IntervalXYDataset createDataset(){String x_name;x_name="X_Name";SimpleHistogramDataset simplehistogramdataset = new SimpleHistogramDataset(x_name);//simplehistogramdataset 裝載直方圖所需數據的數據集List<Double> list_size=new ArrayList<Double>();//list_size 裝載條形圖各小塊頻數的容器list_size.add(9.0);list_size.add(10.0);list_size.add(11.0);list_size.add(12.0);list_size.add(13.0);int n=5;List<Double> l_qujian=list_size;//l_qujian 存放直方圖各小塊區間的容器List<Integer> list_name=new ArrayList<Integer>();//list_name 裝載直方圖各小塊區間的容器list_name.add(23);list_name.add(12);list_name.add(56);list_name.add(32);list_name.add(22);List<Integer> l_size=list_name;//l_size 存放直方圖各區間頻數的容器for(int i=0;i<n-1;i++){SimpleHistogramBin simplehistogrambin = new SimpleHistogramBin(l_qujian.get(i),l_qujian.get(i+1), true, false);//simplehistogrambin  圖形變量simplehistogrambin.setItemCount(l_size.get(i));simplehistogramdataset.addBin(simplehistogrambin);}return simplehistogramdataset;}/*** 創建直方圖* @param intervalxydataset 裝載直方圖所需數據的數據集* @return 返回直方圖*/private static JFreeChart createChart(IntervalXYDataset intervalxydataset){String h_name;h_name="Y_Name";JFreeChart jfreechart = ChartFactory.createHistogram(h_name, null, null, intervalxydataset, PlotOrientation.VERTICAL, true, true, false);//jfreechart  圖形變量,用來裝載圖形XYPlot xyplot = (XYPlot)jfreechart.getPlot();//xyplot  數軸變量,用來存放和設置數軸的信息xyplot.setForegroundAlpha(0.85F);xyplot.setDomainPannable(true);xyplot.setRangePannable(true);NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();//numberaxis 數值變量,用來設置數軸的數值的numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());XYBarRenderer xybarrenderer = (XYBarRenderer)xyplot.getRenderer();//xybarrenderer  圖形方塊變量xybarrenderer.setDrawBarOutline(false);return jfreechart;}/*** 創建直方圖面板 * @return 返回直方圖面板*/public static JPanel createDemoPanel(){JFreeChart jfreechart = createChart(createDataset());//jfreechart 圖形變量,通過圖形數據和圖形名稱創建圖形ChartPanel chartpanel = new ChartPanel(jfreechart);//chartpanel 圖形面板變量chartpanel.setMouseWheelEnabled(true);return chartpanel;}public static void main(String args[]){/*** 繪制直方圖* @author cuit* @return 返回直方圖*/String panel_name;panel_name="My Chart";HistogramDemo2 histogramdemo2 = new HistogramDemo2(panel_name);//histogramdemo2   構造方法實例變量histogramdemo2.pack();RefineryUtilities.centerFrameOnScreen(histogramdemo2);histogramdemo2.setVisible(true);}
}

?

輸出:

?

5.5導致算法異常

當所輸入的上四分位數比下四分位數大或者最小值比最大值大的時候畫出的圖形將不再是箱線圖了。

5.6代碼的算法參考

類源碼:見源程序:Panel.?src.?All_Pictuer.?BoxAndWhiskerChartDemo2

本算法是通過輸入繪制箱線圖的數據集來繪制出餅圖的具體實現。

類和方法調用接口

見源程序:Panel.?src.?All_Pictuer.?BoxAndWhiskerChartDemo2

BoxAndWhiskerChartDemo2.java?下包含如下方法:

BoxAndWhiskerChartDemo2(String?s)??//構造函數,創建面板用來存放圖片

createDataset()??//獲得繪制箱線圖所需的數據

createChart(BoxAndWhiskerXYDataset?boxandwhiskerxydataset)??//創建箱線圖

createDemoPanel()???//創建箱線圖面板

6?正態分布圖算法描述


6.1?正態分布圖算法基本描述

該算法是在給定一些數據集的情況下繪制出符合該數據集的正態分布圖。

  1. 定義:正態分布具有鐘型曲線,曲線對稱,中央部位的概率密度最大。
  2. 符號解釋:無。
  3. 具體計算方法:該算法是利用JFreeChart里的jar包里的類和方法來繪制正態分布圖的。

6.2算法的應用場景

在需要繪制正態分布圖的時候使用該算法。

6.3算法的優缺點

  • 優點是可以很快速的建立一個正態分布圖
  • 缺點是無法直接讀出方差。

6.4算法的輸入輸出

輸入:

*?@param??Pie's?name??string?表示面板名稱?My?Chart

*?@param??u??double??表示均值??2

*?@param??squal_t??double??表示方差??0.25

*?@param??Line's?name??string?表示線條名稱??Chart

*?@param??Pictuer's?name??string?表示圖片名稱?Pictuer?Chart

java代碼實現:

package pictuer;
import java.awt.Dimension;
import java.util.Scanner;
import javax.swing.JPanel;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.function.NormalDistributionFunction2D;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class NormalDistributionDemo1 extends ApplicationFrame
{/*** 構造函數,用來創建面板用來存放圖片* @param s 表示面板的名稱*/public NormalDistributionDemo1(String s){super(s);JPanel jpanel = createDemoPanel();//jpanel  創建面板的名稱jpanel.setPreferredSize(new Dimension(500, 270));setContentPane(jpanel);}/*** 創建正態分布圖面板* @return 返回正態分布圖面板*/public static JPanel createDemoPanel(){JFreeChart jfreechart = createChart(createDataset());//jfreechart 圖形變量,通過圖形數據和圖形名稱創建圖形return new ChartPanel(jfreechart);//ChartPanel 圖形面板變量}/*** 獲得繪制正態分布圖所需的數據 * @return 返回正態分布圖所需的數據*/public static XYDataset createDataset(){Double u=2.0;Double squal_t=0.25;NormalDistributionFunction2D normaldistributionfunction2d = new NormalDistributionFunction2D(u, squal_t);//normaldistributionfunction2d  數據變量,用來存放數軸的數據String Line_name;Line_name="Chart";XYDataset xydataset = DatasetUtilities.sampleFunction2D(normaldistributionfunction2d, -5D, 5D, 100, Line_name);//xydataset  數據變量,用來存放和設置數軸的數據return xydataset;}/*** 創建正態分布圖* @param xydataset  數據變量,用來存放和設置數軸的數據* @return 返回正態分布圖*/public static JFreeChart createChart(XYDataset xydataset){String Pictuer_name;Pictuer_name="Chart";JFreeChart jfreechart = ChartFactory.createXYLineChart(Pictuer_name, "X", "Y", xydataset, PlotOrientation.VERTICAL, true, true, false);//jfreechart  圖形變量,用來裝載圖形return jfreechart;}public static void main(String args[]){/*** 繪制正態分布圖* @author cuit* @return 返回正態分布圖*/String Pie_name;Pie_name="My Chart";NormalDistributionDemo1 normaldistributiondemo1 = new NormalDistributionDemo1(Pie_name);//normaldistributiondemo1   構造方法實例變量normaldistributiondemo1.pack();RefineryUtilities.centerFrameOnScreen(normaldistributiondemo1);normaldistributiondemo1.setVisible(true);}
}

?輸出:

6.5導致算法異常

無。

6.6代碼的算法參考

類源碼:見源程序:Panel.?src.?All_Pictuer.?NormalDistributionDemo1

本算法是通過輸入正態分布圖的數據集來繪制出餅圖的具體實現。

類和方法調用接口

見源程序:Panel.?src.?All_Pictuer.?NormalDistributionDemo1

NormalDistributionDemo1.java?下包含如下方法:

NormalDistributionDemo1(String?s)??//構造函數,創建面板用來存放圖片

createDataset()??//獲得繪制正態分布圖所需的數據

createChart(XYDataset?xydataset)???//創建正態分布圖

createDemoPanel()???//創建正態分布圖面板

7?本章總結


?7.1?基本概念

7.2?各種圖形優缺點

?

8?開源共享?


?PPT:http://yunpan.cn/cFJWt8MBFduhX? 訪問密碼 ad2e

開源代碼:http://yunpan.cn/cFJW5EazGX5mz? 訪問密碼 9304

轉載于:https://www.cnblogs.com/baiboy/p/tjx1.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374343.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JBoss AS 7.0.2“ Arc”發布–使用綁定選項

有關JBoss AS7方面的更多好消息。 JBoss AS 7.0.2.Final“ Arc”已經發布&#xff01; 自AS 7.0.1發布以來已經過去了一個月。 在這短時間內&#xff0c;已修復了許多錯誤&#xff0c;并實現了更多功能和改進。 所有這些錯誤修復和功能已包含在此7.0.2版本中。 此新版本主要包…

C語言開發筆記(五)字符串常量

#include <stdio.h> #include <string.h>int main(void) {char *str "sting";strcpy(str, "hello");printf("%s\n", str);return 0; } 代碼為什么會運行錯誤&#xff0c;異常退出&#xff1f; 這段代碼是新手常見錯誤之一。 定義…

不屬于python標準庫的是_python標準庫和擴展庫

Tkinter ———— Python 默認的圖形界面接口。 Tkinter 是一個和 Tk 接口的模塊&#xff0c; Tkinter 庫提供 了對 Tk API 的接口&#xff0c;它屬于 Tcl/Tk 的 GUI 工具組。 Tcl/Tk 是由 John Ousterhout 發展的書寫和 圖形設備。 Tcl( 工具命令語言 ) 是個宏語言&#xff0c…

Android N 新特性 + APP開發注意事項

1. 多窗口MultiWindow 多窗口MultiWindow&#xff0c;這是Android N里對開發者影響比較大的特性&#xff0c;也是大家疑問比較多的地方。站在開發者的角度其實不必太擔心這個特性會導致我們需要修改很多代碼來適配系統。Google的工程師們也不希望這個特性導致很多應用出現問題&…

C語言開發筆記(六)實參和形參

舉例說明 #include <stdio.h>void swap(int x, int y) {int temp 0;temp x;x y;y temp; }int main(void) {int a 1, b 2;swap(a, b);printf("a%d, b%d\n", a, b);return 0; }結果為 在函數調用時&#xff0c;a的值傳給x&#xff0c;b的值傳給y。執行完…

Spring Singleton,請求,會話Bean和線程安全

由眾多有用框架組成的Spring框架生態系統已成為許多Java EE應用程序的基礎。 但是在所有Spring產品的核心中&#xff0c;我們仍然擁有Spring DI / IOC框架&#xff0c;該框架將Spring推向了新的高度。 隨著越來越多的人將Spring MVC或JSF-Spring集成用于他們的應用程序&#xf…

some fragments

1.fullpage 2.one page.js 3.scrollReveal.js 4.wow.js 5.瀏覽器前綴&#xff1a; -webkit- &#xff1a; Safari&#xff0c;Chrome -o- &#xff1a; Opera -moz- &#xff1a; Firefox -ms- &#xff1a; IE   6.css3過渡動畫&#xff1a;transitio…

面試之ajax原理(轉載)

總結1 總結2 AJAX全稱為“Asynchronous JavaScript and XML”&#xff08;異步JavaScript和XML&#xff09;&#xff0c;是一種創建交互式網頁應用的網頁開發技術&#xff0c; 是幾種原有技術的結合體。它由下列技術組合而成。 1.使用CSS和XHTML來表示。 2. 使用DOM模型來交互和…

優化方案電子版_關于小區分支道路整修設計方案的討論稿(No.2020121)

各位業主&#xff0c;大家好&#xff01; 關于綠洲比華利花園主干道翻新和次干道整修前期勘查和設計方案&#xff0c;經業委會及小區專家小組、設計單位申都設計公司工程設計人員結合本小區的實際情況進行了深入討論&#xff0c;優化設計&#xff0c;形成如下三個獨立方案&…

OSGI和Spring動態模塊–簡單的Hello World

在此姿勢中&#xff0c;我們將采用使用OSGi進行的第一個實現&#xff0c;并使用Spring Dynamic Modules改進應用程序。 Spring動態模塊&#xff08;Spring Dm&#xff09;使基于OSGi的應用程序的開發更加容易。 這樣&#xff0c;服務的部署就容易得多。 您可以像其他任何Spring…

C語言代碼規范(五)函數參數個數

一個函數的參數的數目過多&#xff08;尤其是超過8個&#xff09;顯然是一種不可取的編程風格。參數的數目直接影響調用函數的速度&#xff0c;參數越多&#xff0c;調用函數越慢。 參數的數目少&#xff0c;程序就顯得精練、簡潔&#xff0c;這有助于檢查和發現程序中的錯誤。…

vijos P1740 聰明的質檢員

題目鏈接:傳送門 題目大意:給你n個物品&#xff0c;每件物品有重量 W 和價值 V&#xff0c;給m個區間&#xff0c;和一個標準值。(n,m最大200000) 要求找到一個值x&#xff0c;使得m個所有區間的權值和與標準值的差的絕對值最小。單個區間權值計算公式(數目num0&#xff0c;價值…

為什么有的開關電源需要加自舉電容?

一、什么是自舉電路&#xff1f; 1.1 自舉的概念 首先&#xff0c;自舉電路也叫升壓電路&#xff0c;是利用自舉升壓二極管&#xff0c;自舉升壓電容等電子元件&#xff0c;使電容放電電壓和電源電壓疊加&#xff0c;從而使電壓升高。有的電路升高的電壓能達到數倍電源電壓。…

VS2010報錯 error:LINK1123:轉換到COF期間失敗,文件無限或損壞

右鍵工程-配置屬性-清單工具-輸入和輸出&#xff0c;嵌入清單一項重新選擇為否&#xff0c;如下圖 修改后重新生成和運行&#xff0c;發現程序正常運行了。

springboot 整合mybatis_SpringBoot整合Mybatis、MybatisPuls

文末視頻講解SpringBoot的版本是2.2.0一、整合Mybatis1-1、引入pom文件<dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>8.0.19version> dependency> <dependency> &l…

iOS 開發中遇到的問題

1. 關于糾結很久的KVO崩潰問題&#xff0c;其真正原因是&#xff0c;在刪除roomItem的KVO之前,將這個對象已經賦值為nil,所以實際上并沒有刪除他的observer&#xff0c;因此而崩潰&#xff1b;長時間糾結的原因是受.cxx_destruct影響了思路 2.拷貝block 因為block變量默認是聲明…

為舊版代碼創建存根–測試技術6

任何閱讀此博客的人都可能已經意識到&#xff0c;目前我正在開發一個包含大量舊代碼的項目&#xff0c;這些舊代碼龐大&#xff0c;擴展且編寫時從未進行過任何測試。 在使用此遺留代碼時&#xff0c;有一個行為異常的類非常普遍&#xff0c;整個團隊都一次又一次地犯錯。 為了…

C學習雜記(一)常見誤會

一、sizeof是關鍵字&#xff0c;不是函數。 二、strlen是函數。

python性能解決_我們如何發現并解決Python代碼中性能下降的問題

Python部落(python.freelycode.com)組織翻譯&#xff0c;禁止轉載&#xff0c;歡迎轉發。 作者&#xff1a;Omer Lachish 最近&#xff0c;我們已經開始使用RQ庫代替Celery庫作為我們的任務運行引擎。第一階段&#xff0c;我們只遷移了那些不直接進行查詢工作的任務。這些任務包…

easyui $.parser.parse 頁面重新渲染

一些dom元素是動態拼接上的easui的樣式&#xff0c;由于頁面已經渲染過了&#xff0c;所以需要手動執行渲染某個部件或者整個頁面 $.parser.parse(); // parse all the page $.parser.parse(#cc); // parse the specified node $.parser.parse($("#grid").parent());…