可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的。对于初学者来说,很容易被这官网上众多的图表类型给吓着了,由于种类太多,几种图表的绘制方法很有可能会混淆起来。
因此,在这里,我特地总结了六种常见的基本图表类型,你可以通过对比学习,打下坚实的基础。
01. 折线图
绘制折线图,如果你数据不是很多的话,画出来的图将是曲折状态,但一旦你的数据集大起来,比如下面我们的示例,有100个点,所以我们用肉眼看到的将是一条平滑的曲线。
这里我绘制三条线,只要执行三次 plt.plot 就可以了。
1
2
3
4
5
6
7
8
9
10
11
|
import numpy as np import matplotlib.pyplot as plt x = np.linspace( 0 , 2 , 100 ) plt.plot(x, x, label = 'linear' ) plt.plot(x, x * * 2 , label = 'quadratic' ) plt.plot(x, x * * 3 , label = 'cubic' ) plt.xlabel( 'x label' ) plt.ylabel( 'y label' ) plt.title( "simple plot" ) plt.legend() plt.show() |
02. 散点图
其实散点图和折线图是一样的原理,将散点图里的点用线连接起来就是折线图了。所以绘制散点图,只要设置一下线型即可。
注意:这里我也绘制三条线,和上面不同的是,我只用一个 plt.plot 就可以了。
1
2
3
4
5
6
|
import numpy as np import matplotlib.pyplot as plt x = np.arange( 0. , 5. , 0.2 ) # 红色破折号, 蓝色方块 ,绿色三角块 plt.plot(x, x, 'r--' , x, x * * 2 , 'bs' , x, x * * 3 , 'g^' ) plt.show() |
03. 直方图
直方图,大家也不算陌生了。这里小明加大难度,在一张图里,画出两个频度直方图。这应该在实际场景上也会遇到吧,因为这样真的很方便比较,有木有?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import numpy as np import matplotlib.pyplot as plt np.random.seed( 19680801 ) mu1, sigma1 = 100 , 15 mu2, sigma2 = 80 , 15 x1 = mu1 + sigma1 * np.random.randn( 10000 ) x2 = mu2 + sigma2 * np.random.randn( 10000 ) # the histogram of the data # 50:将数据分成50组 # facecolor:颜色;alpha:透明度 # density:是密度而不是具体数值 n1, bins1, patches1 = plt.hist(x1, 50 , density = true, facecolor = 'g' , alpha = 1 ) n2, bins2, patches2 = plt.hist(x2, 50 , density = true, facecolor = 'r' , alpha = 0.2 ) # n:概率值;bins:具体数值;patches:直方图对象。 plt.xlabel( 'smarts' ) plt.ylabel( 'probability' ) plt.title( 'histogram of iq' ) plt.text( 110 , . 025 , r '$\mu=100,\ \sigma=15$' ) plt.text( 50 , . 025 , r '$\mu=80,\ \sigma=15$' ) # 设置x,y轴的具体范围 plt.axis([ 40 , 160 , 0 , 0.03 ]) plt.grid(true) plt.show() |
04. 柱状图
同样的,简单的柱状图,我就不画了,这里画三种比较难的图。
4.1 并列柱状图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import numpy as np import matplotlib.pyplot as plt size = 5 a = np.random.random(size) b = np.random.random(size) c = np.random.random(size) x = np.arange(size) # 有多少个类型,只需更改n即可 total_width, n = 0.8 , 3 width = total_width / n # 重新拟定x的坐标 x = x - (total_width - width) / 2 # 这里使用的是偏移 plt.bar(x, a, width = width, label = 'a' ) plt.bar(x + width, b, width = width, label = 'b' ) plt.bar(x + 2 * width, c, width = width, label = 'c' ) plt.legend() plt.show() |
4.2 叠加柱状图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import numpy as np import matplotlib.pyplot as plt size = 5 a = np.random.random(size) b = np.random.random(size) c = np.random.random(size) x = np.arange(size) # 这里使用的是偏移 plt.bar(x, a, width = 0.5 , label = 'a' ,fc = 'r' ) plt.bar(x, b, bottom = a, width = 0.5 , label = 'b' , fc = 'g' ) plt.bar(x, c, bottom = a + b, width = 0.5 , label = 'c' , fc = 'b' ) plt.ylim( 0 , 2.5 ) plt.legend() plt.grid(true) plt.show() |
05. 饼图
5.1 普通饼图
1
2
3
4
5
6
7
8
9
10
|
import matplotlib.pyplot as plt labels = 'frogs' , 'hogs' , 'dogs' , 'logs' sizes = [ 15 , 30 , 45 , 10 ] # 设置分离的距离,0表示不分离 explode = ( 0 , 0.1 , 0 , 0 ) plt.pie(sizes, explode = explode, labels = labels, autopct = '%1.1f%%' , shadow = true, startangle = 90 ) # equal aspect ratio 保证画出的图是正圆形 plt.axis( 'equal' ) plt.show() |
5.2 嵌套饼图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import numpy as np import matplotlib.pyplot as plt # 设置每环的宽度 size = 0.3 vals = np.array([[ 60. , 32. ], [ 37. , 40. ], [ 29. , 10. ]]) # 通过get_cmap随机获取颜色 cmap = plt.get_cmap( "tab20c" ) outer_colors = cmap(np.arange( 3 ) * 4 ) inner_colors = cmap(np.array([ 1 , 2 , 5 , 6 , 9 , 10 ])) print (vals. sum (axis = 1 )) # [92. 77. 39.] plt.pie(vals. sum (axis = 1 ), radius = 1 , colors = outer_colors, wedgeprops = dict (width = size, edgecolor = 'w' )) print (vals.flatten()) # [60. 32. 37. 40. 29. 10.] plt.pie(vals.flatten(), radius = 1 - size, colors = inner_colors, wedgeprops = dict (width = size, edgecolor = 'w' )) # equal 使得为正圆 plt.axis( 'equal' ) plt.show() |
5.3 极轴饼图
要说酷炫,极轴饼图也是数一数二的了,这里肯定也要学一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import numpy as np import matplotlib.pyplot as plt np.random.seed( 19680801 ) n = 10 theta = np.linspace( 0.0 , 2 * np.pi, n, endpoint = false) radii = 10 * np.random.rand(n) width = np.pi / 4 * np.random.rand(n) ax = plt.subplot( 111 , projection = 'polar' ) bars = ax.bar(theta, radii, width = width, bottom = 0.0 ) # left表示从哪开始, # radii表示从中心点向边缘绘制的长度(半径) # width表示末端的弧长 # 自定义颜色和不透明度 for r, bar in zip (radii, bars): bar.set_facecolor(plt.cm.viridis(r / 10. )) bar.set_alpha( 0.5 ) plt.show() |
06. 三维图
6.1 绘制三维散点图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d data = np.random.randint( 0 , 255 , size = [ 40 , 40 , 40 ]) x, y, z = data[ 0 ], data[ 1 ], data[ 2 ] ax = plt.subplot( 111 , projection = '3d' ) # 创建一个三维的绘图工程 # 将数据点分成三部分画,在颜色上有区分度 ax.scatter(x[: 10 ], y[: 10 ], z[: 10 ], c = 'y' ) # 绘制数据点 ax.scatter(x[ 10 : 20 ], y[ 10 : 20 ], z[ 10 : 20 ], c = 'r' ) ax.scatter(x[ 30 : 40 ], y[ 30 : 40 ], z[ 30 : 40 ], c = 'g' ) ax.set_zlabel( 'z' ) # 坐标轴 ax.set_ylabel( 'y' ) ax.set_xlabel( 'x' ) plt.show() |
6.2 绘制三维平面图
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from matplotlib import pyplot as plt import numpy as np from mpl_toolkits.mplot3d import axes3d fig = plt.figure() ax = axes3d(fig) x = np.arange( - 4 , 4 , 0.25 ) y = np.arange( - 4 , 4 , 0.25 ) x, y = np.meshgrid(x, y) r = np.sqrt(x * * 2 + y * * 2 ) z = np.sin(r) # 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface) ax.plot_surface(x, y, z, rstride = 1 , cstride = 1 , cmap = 'rainbow' ) plt.show() |
总结
以上所述是小编给大家介绍的python绘制六种可视化图表,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:https://juejin.im/post/5b801d8de51d4538940024e5