Python数据可视化 - 使用Matplotlib库绘制点图、折线图、条状图与饼图
发布时间:2018-10-22 20:15,
浏览次数:811
, 标签:
Python
Matplotlib
Notes(2019.04.06):
Data Visiable with matplotlib.pyplot - Using matplotlib.pyplot: >>> import
matplotlib.pyplot as plt New Words: plot = picture = figure sub-A:the child of
A First: #title中的loc只可以放在上方的left/center/right! 0.Draw many sub-figures in one
main-figure plt.figure(num=2) 1.indicate a area of number numpy.arange(1,10,2)
#can own float in it!!! range(1,10,2) #only integer!!! np.array([...]) #any
type!!! attention:the two ways above support index and slice visit 2.divide
area of figure (row,column,position -> from row)
matplotlib.pyplot.subplot(2,2,1) matplotlib.pyplot.subplot(221)
matplotlib.pyplot.show() 3.scatter figure
matplotlib.pyplot.scatter(List1,List2,color,marker)
matplotlib.pyplot.title("...") matplotlib.pyplot.show() 4.plot figure
plt.plot(List1,List2,color='red','o-/o/-/./--/-./:') plt.plot(x, y,
'ro-',label="xxx") # red+solid-point+line plt.xlabel("...") plt.ylabel("...")
matplotlib.pyplot.title("...") plt.xlim(a,b) # limit the x-axis plt.ylim(c,d) #
limit the y-axis plt.grid() #show grid plt.legend(loc="upper left") #generate
legend by plot-labels matplotlib.pyplot.show() 5.bar figure def draw_bar(): x =
np.array(["Frank", "kiroto", "pixel", "Lisa", "Bostor"]) y = np.array([45, 12,
23, 78, 9]) z = np.array([12, 45, 55, 19, 66]) plt.subplot(211)
plt.bar(np.arange(5), y, width=0.3, color='red', label="Life")
plt.bar(np.arange(5)+0.3, z, width=0.3, color='green', label="Entertainment")
plt.title("Person's ability", fontsize=12) plt.xlabel("Name", fontsize=12)
plt.ylabel("Score", fontsize=12) plt.grid() plt.legend(loc='upper left')
plt.subplot(212) plt.bar(x, height=y, color='red', width=0.3, label='Life')
plt.title("Person's ability", fontsize=12) plt.xlabel("Name", fontsize=12)
plt.ylabel("Score", fontsize=12) plt.xticks([0, 1, 2, 3, 4], ["A", "B", "C",
"D", "E"]) plt.grid() plt.legend(loc='upper left') plt.show() 6.pie figure (8
parameters)
matplotlib.pyplot.pie(List1,explode,labels,colors,radius,labeldistance,autopct,shadow)
matplotlib.pyplot.title("...") matplotlib.pyplot.legend(loc)
matplotlib.pyplot.axis("equal") matplotlib.pyplot.show()
★使用Python第三方库matplotlib(2D绘图库)绘制:
* 点图
* 折线图/曲线图
* 条状图
* 饼图
★引入:
常用的颜色c="???":
1:红色‘red’
2:蓝色‘blue’/‘b’
3:黄色‘yellow’
4:绿色‘green’
5:橙色‘orange’
6:黄绿色‘yellowgreen’
常见的参数:
plt.xlabel("Line") #行标签
plt.ylabel("Column",fontsize=15) #列标签
plt.title("Chart") #标题(中文会乱码)
plt.xlim(0,10) #行的取值范围
plt.ylim(0,100) #列的取值范围
plt.margins(0) #边缘举例大小
中文的显示:
import matplotlib.pyplot as plt plt.rcParams["font.family"]=["sans-serif"]
plt.rcParams["font.sans-serif"]=["SimHei"] #SimHei 黑体 #KaiTi 楷体 #SimSun 宋体
#STXingkai 华文行楷
绘图模块导入
import matplotlib.pyplot as plt import numpy as np
一:点图(plt.scatter(x,y))
*scatter v.撒 n.零星分散的东西
x = np.arange(1,10) #必须从1开始,而且间隔为1 y = x plt.scatter(x,y,c='y',marker='x') #
之所以这里写两个是为了更好的体现出marker参数的含义 # marker参数是用相应的字符对图中出现的点进行标记
plt.scatter(x,y,c='g',marker='*')
效果展示:
注意事项与常用+关键参数解释:
1:一般在写代码的过程中会遇到换行的问题,但是直接按回车就会直接执行该条语句,那么怎么换行呢?
-> 在一行的末尾使用空格+右斜线,再回车就将直接转到下一行,但是有些时候这个末尾的空格+右斜线会导致运行错误,
-> 所以在换行后可以使用鼠标或指针的上下左右定位到上一行末尾将那个斜线删除就好了
2:这个函数主要有两个主要参数x、y,只要这两个参数存在,那么该函数就能够正确绘图,其余参数直接取默认值;
3:第三个参数c='g'
--->>>这里的c是color(颜色,不是colour~),g表示的是green(绿色),当然也可以写成:color='green'(单引号也可以换成双引号),都能够正常运行,为了方便起见就写成上述的样子了(
前后都取首字母),我在文章开头的引入中介绍了不同的可以使用的颜色,可以动手尝试相应效果。
4:第四个参数marker在上述代码框中已经解释过。
5:是不是觉得怎么就两个属性参数?当然不是,我也在文章开头提到了常见的参数,看完了这个部分的第一点后就可以直接将其用在绘制这个图上面了。
二:折线图/曲线图(plt.plot(x,y))
* plot n.点
* linewidth n.线的宽度
x = np.array([1,2,3,4,5,6,7,8]) #必须从1开始,而且间隔为1 # 元组表示:x = (1,2,3,4,5,6,7,8) #
列表表示:x = [1,2,3,4,5,6,7,8] y = np.array([3,5,7,6,2,6,10,15])
plt.plot(x,y,linewidth=3) #这里也只有两个主要参数来支撑折线图的绘制
效果展示:
注意事项与常用+关键参数解释:
1:语法plt.plot(x,y) 关键参数有两个
2:linewidth线的粗细
3:颜色与上面一致(没体现在图中)
作出正弦函数的图像:
import matplotlib.pyplot as plt import numpy as np t = np.arange(0.0,1.0,0.01)
#这里不能够使用range,range内部的参数只能够是整数 s = np.sin(2 * np.pi * t) plt.plot(t,s,color =
"red",linewidth = 3) #前两个参数是x轴和y轴的坐标
测试结果:
三:条状图(plt.bar())
*bar n.条状物、栅栏
x = np.array([1,2,3,4,5,6,7,8]) #必须从1开始,而且间隔为1 y =
np.array([13,25,17,36,21,16,10,15]) # alpha是透明度(0~1->1表示不透明) ,b是蓝色,c是浅蓝色 #
0.2是每一条的宽度 plt.bar(x,y,0.2,alpha=1,color='b')
效果展示:
注意事项与常用+关键参数解释:
1:x、y的定义方式不止np.array一种,元组/列表均可
2:x定义的时候必须从一开始而且连续
3:绘制条状图语法plt.bar(x,y,…) x,y是关键参数,后面的一些参数仅仅起到修饰该条状图的作用
4:color颜色
5:整型数据 在x,y后面直接接着一个整型参数直接决定条状图形的宽度(条条之间的间隔,以0.5为基准)
6:alpha透明度【计算机专业专有含义】(1为不透明,小于1为不透明度的大小)
四:饼图(plt.pie())
* pie n.派
* explode v.爆炸
import matplotlib.pyplot as plt plt.rcParams["font.family"]=["sans-serif"]
plt.rcParams["font.sans-serif"]=["SimHei"] #SimHei 黑体 #KaiTi 楷体 #SimSun 宋体
#STXingkai 华文行楷 labels = ["Unknown","Male","Female"] colors =
["red","yellow","blue"] sizes = [15,40,350] explode = [0,0.1,0]
plt.pie(sizes,explode,labels,colors,radius=0.9,labeldistance = 1.1,autopct =
'%.2f%%',shadow = False) plt.title("好友分布图") #标题 plt.axis("equal")
#坐标轴一致(防止饼图为椭圆) plt.legend(loc='lower left') #给图像加上图例
plt.savefig("f:pie.png",dpi=500) #指定分辨率存储图片 plt.show()
效果展示:
=> 饼图的8个常用参数(包括3个关键参数):
1:sizes每一个区域的值(输入所有的值后自动按比例确认各自所占的比例)
2:explode是否需要突出某部分(基础值为0)
3:labels分类的标签
4:colors自定义的颜色(必须放在第四个位置,缺省会取默认颜色)
☆:注意前四个必须按照上述的顺序进行排列,后面的参数可以不论顺序!
5:radius半径(基准为1)
6:autopct’%1.1f%%’ 饼图上是否显示数据信息(百分比)
7:shadow是否有阴影(True/False注意大小写)
8:startangle起始绘制角度(逆时针以第一个标签开始旋转绘制相应的扇形区域)
☆图例plt.legend(loc="xxx")的位置参数:
五:绘制图形的保存
由于我日常写代码使用的是jupyter qtconsole,所以没有使用到plt.show(),就基于不使用plt.show()的情况说明如何保存:
在打印图片的语句之后使用plt.savefig(“F:/xxx.png/.jpg”),也可以省略后缀,默认保存为.png格式图片,
举个例子:
plt.pie(sizes,explode,labels,autopct="%1.2f%%",shadow=True,startangle=90) #
fig = plt.gcf() 测试的时候使用 plt.savefig("f:/aaa.png")
☆ 确保图片的存储在plt.show()之前,否则会保存空白图片!
*六:附加
1:用到了我在文章开头的参数了吗?
有了那些参数可以给图形加上一些修饰(x、y轴标题,限制x、y轴取值来改变图像所处的位置等等~);
2:上面提到的所有参数大部分是通用的,例如饼图中的透明度alpha参数也可以用到条状图中;
3:参数都是预先定义的不免有些麻烦,这就不免令我们想到是不是可以通过手动输入参数呢?
那么如何使用input()输入参数呢?可是input()输入的是字符串而且还会有空格?
那么就自己编写一个demo_function来对input()函数的输入进行转换吧~
相应函数--->>传送门(点我即达~)
最快的脚步不是跨越,而是继续,最慢的步伐不是小步,而是徘徊。