返回顶部

MatplotLib 第一部分

  1 import numpy as np
  2 import pandas as pd
  3 import matplotlib.pyplot as plt
  4 
  5 # matplotlib 是一个Python 的 2D图形包 。pyplot 封装了很多画图的函数
  6 
  7 # plt.show()函数  
  8 
  9 # plt.plot()函数 
 10 # 可以绘制线型图
 11 if 0:
 12     if 0:
 13         # 小试牛刀
 14         plt.plot([1, 2, 3, 4, 4, 3, 2, 1])  # 此时默认以索引作为x坐标
 15         plt.xlabel('x')
 16         plt.ylabel('y')
 17         pass
 18     if 0:
 19         # 基本用法
 20         # 1,指定x 和 y  :
 21         # plt.plot(x,y)
 22         # 2,默认参数  x为默认索引
 23         # plt.plot(y)
 24         plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
 25         pass
 26 # 字符参数
 27 if 0:
 28     # 表示颜色的字符参数
 29     if 1:
 30         '''
 31         'b' blue 
 32         'g' green
 33         r  red 
 34         c  cyan 青色
 35         m  magenta 品红 
 36         y  yellow 
 37         k  black  
 38         w  white  
 39         '''
 40 
 41         pass
 42 
 43     # 表示线型的字符参数
 44     if 1:
 45         '''
 46         -   实线  
 47         --  虚线 
 48         。。。。。。
 49         '''
 50         pass
 51 
 52     if 1:
 53         # 要求画出红色 圆点
 54         plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
 55         # r 是红色 o  是圆点
 56         pass
 57 
 58     pass
 59 
 60 # 显示范围
 61 if 0:
 62     # 与 Matlab类似 ,这里可以使用axis()指定坐标轴显示的范围
 63     # plt.axis([xmin,xmax,ymin,ymax ])
 64     plt.plot(range(10), [x ** 2 for x in range(10)])
 65     plt.axis([0, 10, 0, 100])
 66     pass
 67 
 68 # 传入Numpy 数组   (常用 )
 69 if 0:
 70     # 之前都是传入的是列表,其实plot 内部还是会将列表转为数组的
 71     # 所以,以后最常用的还是传入数组
 72 
 73     # 在一个图中绘制多条线
 74     arr = np.arange(0, 5, 0.2)  # 不包含 5   step 为 0.2
 75     plt.plot(arr, arr, 'r-',
 76              arr, arr ** 2, 'b--',
 77              arr, arr ** 3, 'k^',
 78              arr, arr ** 2 - arr + 10, 'gs'  # s 指的是 square
 79              )
 80 
 81     pass
 82 
 83 # 线条属性
 84 if 0:
 85     # 这里是通过关键词的方法而不是通过字符的方式来控制颜色,线型等...
 86     # 例如 通过linewidth 改变线宽  通过color 改变颜色
 87     x = np.linspace(-np.pi, np.pi)  # 等差数列  #固定个数用arange()
 88     y = np.sin(x)
 89     plt.plot(x, y, linewidth=4.0, color='r')
 90 
 91     pass
 92 
 93 # 使用 plt.plot()的返回值 来设置线条属性 
 94 if 0:
 95     #plot函数返回一个Line2D对象,每个对象代表输入的一对组合
 96     #eg:
 97     # line1,line2 = plt.plot(x1,y1,x2,y2)
 98     # line1 ,line2 为两个line2D 对象
 99 
100     # lines = plt.plot(x1,y1,x2,y2,x3,y3)
101     #lines 为3个Line2D对象组成的列表
102 
103     #我们可以使用这些返回值来对线条属性进行设置
104 
105     x = np.arange(-np.pi,np.pi,0.02)
106     y = np.sin(x)
107     line1 ,line2 = plt.plot(x,y,'r-',
108                             x,y+1,'b--')
109 
110     line1.set_antialiased(False)  #关闭抗锯齿
111 
112 
113 
114 
115 
116 
117 
118 
119     pass
120 
121 #可以使用plt.setp() 更简便地 修改线条的性质 
122 if 0:
123     x = np.arange(-np.pi,np.pi,0.02)
124     y = np.sin(x)
125     line = plt.plot(x,y)
126     plt.setp(line,color='g',linewidth=4)
127 
128     pass
129 
130 # plt.show()
131 #子图
132 if 0:
133     #figure()函数会产生一个指定编号为num 的图 :
134     #plt.figure(num)
135     '''
136         这里,figure(1) 其实是可以省略的,因为默认情况下
137         plt会自动地产生一幅图像,
138         使用subplot 可以在一副图中生成多个子图,其参数为:
139         plt.subplot(numrows,numcols,fignum)
140         
141         当 numrows * numcols <10  时,中间的逗号可以省略,
142         因此,plt.subplot(211)  相当于plt.subplot(2,1,1)
143         
144     '''
145     x = np.arange(-np.pi,np.pi,0.02)
146     y = np.sin(x)
147 
148     plt.figure(figsize=(10,6))
149     plt.subplot(221)
150     plt.plot(x,y,'r-')
151 
152     plt.subplot(222)
153     plt.plot(x,y*x,'g-')
154 
155     plt.subplot(223)
156     plt.plot(y,x,'y-')
157 
158     plt.subplot(224)
159     plt.plot(x,y*np.exp(x),'c-') #cyan  青色
160     pass
161 
162 # plt.show()
163 
164 
165 #excel 数据绘图
166 df = pd.read_excel("d:/test.xlsx")
167 if 0:
168     print(df[:5])
169 
170 if 0:
171 
172     # plt.rcParams['font.family'] =['SimHei'] # 修改全局字体
173     # plt.rcParams['axes.unicode_minus'] =False # 显示负号
174     #上面修改的都是全局的 ,不建议,应当使用局部的
175 
176     # 绘制每个姓名的数量   的柱状图(bar chart )
177     if 0:
178         data = df['姓名'].value_counts()
179         # print(data)
180         x = data.index
181         y = data.values
182         plt.figure(figsize=(10,6))  #定义图片的大小
183         plt.bar(x,y,color='c')
184         plt.title("各个 '姓名' 的 数量 ",fontproperties='SimHei',fontsize=10)
185         plt.xlabel("x轴",fontproperties='SimHei',fontsize=18)
186         plt.ylabel("y轴",fontproperties='SimHei',fontsize=18)
187 
188         plt.tick_params(labelsize=14)
189         plt.xticks(fontproperties ='SimHei')
190         if 0:
191             plt.xticks(rotation=90) #使x轴上的标签逆时针旋转90
192 
193 
194         #将每个具体的数字写到柱子 上
195         for a,b in zip(x,y):
196             plt.text(a,b+1,b,ha='center')
197                 #ha 是 horizontal align
198                 #va  是 vitual align
199 
200         #加上网格线
201         plt.grid()
202 
203 
204         pass
205 
206     #绘制 每个学号的 数量 的折线图 (看趋势)
207     if 0:
208         data = df['学号'].value_counts()
209         # print(data)
210         data = data.sort_index()
211 
212         x = data.index
213         y = data.values
214 
215         plt.plot(x,y,color = 'b')  #折线图
216 
217         plt.title("每个学号的数量",fontproperties='SimHei',fontsize=20)
218         plt.xlabel("学号",fontproperties = 'SimHei',fontsize = 18)
219         plt.ylabel("数量",fontproperties = 'SimHei',fontsize = 18)
220 
221         for a,b in zip(x[::5],y[::5]): #学号每隔5 画上具体数据
222             plt.text(a,b+0.1,b)
223 
224         #给某一点加注释
225         plt.annotate("这是我",fontproperties='SimHei',xy=(17096218,data[17096218]),xytext=(17096300,data[17096218]+3),
226                      arrowprops=dict(facecolor='black',edgecolor='red')
227                      #facecolor 是填充颜色  ,edgecolor 是边缘颜色
228                      )
229 
230 
231 
232 
233         pass
234 
235     #绘制饼图  工资  (适合类别比较少的)
236         #饼图 Sector Graph 又名  Pie Graph
237     if 0:
238         '''
239         plt.pie(
240             x,     #x  是数据  
241             explode=None, 
242             labels=None,  #饼图外侧的说明文字  
243             colors=None, 
244             autopct=None,   #饼图内百分比的设置 
245             pctdistance=0.6, 
246             shadow=False,   #饼图要不要有阴影 
247             labeldistance=1.1,
248             startangle=None,  #起始位置的角度 
249             radius=None
250             ):
251             
252         返回值:
253             如果没有设置autopct ,返回(patches,texts)
254             反之,返回(patches,texts ,autotexts)
255         '''
256         # print(df['工资'].min())          12345.23
257         # print(df['工资'].max())          557345.23
258 
259         #使用cut 离散化数据
260         data = pd.cut(df['工资'],[12000,100000,300000,400000,560000])
261         # print(data)
262         if 0:
263             print(data.value_counts())
264             # (100000, 300000]    193
265             # (12000, 100000]     101
266             # (400000, 560000]     16
267             # (300000, 400000]     10
268             # Name: 工资, dtype: int64
269 
270         data = data.value_counts()
271         y = data.values
272         y = y/sum(y)  #就算自己不归一化,系统也会替我们进行
273 
274         plt.figure(figsize=(7,7))
275         plt.title("工资的占比",fontproperties ='SimHei')
276         patches ,l_text,p_text = plt.pie(y,labels=data.index,autopct='%.1f %%',colors='ycgr',
277                 startangle=90,
278                 )
279 
280         #根据pie 的返回值设置图中的字体
281         #设置 p_text 图内的字体
282         for i in p_text:
283             i.set_size(14)
284             i.set_color('w')
285 
286         #设置 l_text 图外的字体
287         for i in l_text:
288             i.set_size(10)
289             i.set_color('red')
290 
291         #增加一个图列
292         plt.legend()
293 
294         pass
295 
296     #绘制频率直方图  对年龄的频率绘制分布直方图
297         #直方图 Histogram  又称质量分布图,
298         #用来反应数据的分布情况
299     if 1:
300         '''
301         plt.hist(
302         x,  #需要计算直方图的一维数组
303         bins=None,  #直方图的柱数,默认为 10 
304         normaed,  #是否将得到的直方图归一化  ,默认为0  
305         facecolor, #直方图的颜色 
306         edgecolor,   # 直方图边框颜色 
307         alpha ,   #透明度 
308         histtype='bar' #直方图的类型  
309         
310         )
311         返回值 :
312         n :直方图向量  ,是否归一化由参数 normed 决定 
313         bins :返回各个bin 的区间范围 
314         patches :返回每个bin 里面包含的数据,是一个list  
315         
316         '''
317         plt.figure(figsize=(10,6))
318         plt.hist(df['年龄'],bins=20,edgecolor='k',alpha=0.5)
319 
320         pass
321 
322 
323     pass
324 plt.show()
View Code

 

posted @ 2019-09-22 15:15  Zcb0812  阅读(179)  评论(0编辑  收藏  举报