1、棉棒图(棒棒糖图)
棉棒图传递了柱状图和条形图相同的信息,只是将矩形换成线条,这样可以减少展示空间,重点放在数据上,看起来更加简洁美观。相对于柱状图,棉棒图更加适合用于数据量较多的情况。
语法:plt.stem([locs], heads, linefmt, markerfmt, basefmt, [bottom], [orientation])
loc:对于垂直棉棒图,对应的是x轴位置,对于水平棉棒图,对应的是y轴位置,默认为heads长度。(可选参数)
heads:每一个棉棒的长度。
linefmt:棉棒的样式。(可选参数)
linefmt | 效果 |
---|---|
'-' | 实线 |
'--' | 虚线 |
'-.' | 虚线-点线 |
':' | 点线 |
注:前面加颜色简写可以为其指定颜色。例如:'g--'表示绿色的虚线,'r-.'表示红色的虚线-点线。同样的规则适用于末端样式。
markerfmt:棉棒末端样式,默认圆形。'd'表示菱形,'*'表示星形,'rd'表示红色的菱形,'r'表示红色的圆形(因为默认是圆形,加上了红色)。(可选参数)
basefmt:基线的样式,规则和颜色同linefmt。(可选参数)
bottom:基线位置,默认为0。(可选参数)
orientation:棉棒图方向,默认垂直x轴。(可选参数)
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2, 5, 30)
y = np.sin(x)
fig = plt.figure(figsize = (8, 8))
#默认样式
ax1 = fig.add_subplot(221)
ax1.stem(x, y)
#设置棉棒线形为蓝色虚线,标记点为菱形
ax2 = fig.add_subplot(222)
ax2.stem(x, y, linefmt = 'b--', markerfmt = 'd')
#设置棉棒线形为蓝色虚线-点线,标记点为菱形,基线线型为红色虚线
ax3 = fig.add_subplot(223)
ax3.stem(x, y, linefmt = 'b-.', markerfmt = 'bo', basefmt = 'r--')
#设置棉棒线形为蓝色虚线,标记点为菱形基线,基线线型为红色且起始点为0.01
ax4 = fig.add_subplot(224)
ax4.stem(x, y, linefmt = 'b:', markerfmt = 'b*', basefmt = 'b-', bottom = 0.01)
plt.show()
2、间断条形图
间断条形图是在条形图基础上绘制的,主要可视化数据在时间维度上的变化情况。
语法:plt.broken_barh(xranges, yrange, **kwargs)
xranges:表示某个系列的持续时间,例如[(60, 90), (190, 20), (250, 15)]表示有三段。第一段起点为x=60,持续时间90单位;第二段起点为x=190,持续时间20单位,以此类推。
yrange:表示条形图矩形的宽度(占据y轴的位置),例如(10, 8)表示该系列从y=10开始,占据宽度为8。
**kwargs:其他参数设置,例如facecolors表示系列颜色等。具体参考:
https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.broken_barh.html?highlight=broken%20barh#matplotlib.axes.Axes.broken_barh
font1 = {
'family': 'simsun',
'size': 14
}
fig = plt.figure()
#设置每个系列的持续时间和颜色
broken1 = [(30, 50), (120, 10), (160, 70)]
color1 = '#af5000'
broken2 = [(10, 50), (100, 20), (150, 50)]
color2 = ('#7fc9f7', '#fdc086', '#fdc000')
ax1 = fig.add_subplot(111)
ax1.broken_barh(broken1, (10, 8), facecolors = color1)
ax1.broken_barh(broken2, (20, 8), facecolors = color2)
ax1.set_yticks([14, 24], ['装置1', '装置2'])
y_label = ax1.get_yticklabels()
#设置y轴标签字体和大小
for label in y_label:
label.set_fontname('simsun')
label.set_fontsize(14)
ax1.set_xlabel('故障持续情况', font1)
plt.show()
3、雷达图
又被称为蜘蛛图、极地图或星图。雷达图是用来比较多个定量变量的方法,可以用于查看哪些变量具有相似的数值,或者每个变量中有没有异常值。此外,雷达图也可以查看数据集中哪些变量得分较高/低,是显示性能表现的理想之选。
语法1:plt.plot(radius, value, **kwargs)
radius:某个变量所在的角度。
value:变量值。
**kwargs:其他设置,例如:marker(点标记样式);markerfacecolor(点标记颜色);markersize(点标记大小);color(线颜色);linewidth(线宽度);label(系列标签)
现在构造一个数据集,包括两个站点的1-12月的月平均风速,实现用雷达图表示。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import matplotlib as mpl
mpl.rcParams["legend.title_fontsize"] = 14 #设置图例标题字体大小为14号
font1 = {
'family': 'simsun',
'size': 14
}
fig = plt.figure(figsize = (8, 8))
#构建数据集,2个站点的1-12月平均风速
dict1 = dict(
month = [i for i in range(1, 13, 1)],
site1_ws = [4.5, 3.6, 2.1, 1.3, 2.7, 6.3, 5.5, 5.9, 4.6, 2.6, 2.1, 1.7],
site2_ws = [2.1, 1.7, 2.3, 2.5, 3.1, 4.3, 4.7, 6.5, 5.8, 4.6, 3.2, 2.8]
)
df = pd.DataFrame(dict1)
N = df.shape[0]
angels = [n/float(N)*2*np.pi for n in range(N)] #设置每个月份角度值,共分为12月
angels += angels[:1] #关键语句,如果不添加此语句,最后12月和1月不能相连
values1 = list(df.site1_ws)
values2 = list(df.site2_ws)
values1 += values1[:1] #关键语句,同angel效果一样
values2 += values2[:1]
#默认样式
ax1 = fig.add_subplot(221, polar = True)
ax1.plot(angels, values1, label = 'site1')
ax1.plot(angels, values2, label = 'site2')
#极坐标旋转90度,定义方向为顺时针,设置y值位置
ax2 = fig.add_subplot(222, polar = True)
ax2.set_theta_offset(np.pi/2) #设置极坐标旋转角度,旋转90,默认逆时针旋转
ax2.set_theta_direction(-1) #设置极坐标方向,定义顺时针从小到大
ax2.set_rlabel_position(0) #设置极坐标y值位置
ax2.plot(angels, values1, label = 'site1')
ax2.plot(angels, values2, label = 'site2')
#设置x轴标签
ax3 = fig.add_subplot(223, polar = True)
ax3.set_theta_offset(np.pi/2)
ax3.set_theta_direction(-1)
ax3.set_rlabel_position(0)
ax3.set_xticks(angels[:-1], df.month)#设置x轴标签,改为1-12月
ax3.plot(angels, values1, label = 'site1')
ax3.plot(angels, values2, label = 'site2')
#设置标记点线型,颜色,大小等,以及图例标题字体,字号
ax4 = fig.add_subplot(224, polar = True)
ax4.set_theta_offset(np.pi/2)
ax4.set_theta_direction(-1)
ax4.set_rlabel_position(0)
ax4.set_xticks(angels[:-1], df.month)
ax4.set_xlabel('月份', font1)
#设置标记点颜色,大小,形状,线型,线宽的设置
ax4.plot(angels, values1, marker = 'o', markerfacecolor = '#7fbc41', markersize = 7, color = 'k', linewidth = 1, label = 'site1')
ax4.plot(angels, values2, marker = 'o', markerfacecolor = '#c51b7d', markersize = 7, color = 'k', linewidth = 1, label = 'site2')
#设置图例标题字体为宋体,内容字号为14号
ax4.legend(title = '平均风速', loc = 2, bbox_to_anchor=(1.05, .3), title_fontproperties = 'simsun', fontsize = 14)
示例2:具有填充颜色效果的雷达图。
要求将两个站点的雷达图分别用不同颜色填充。
实现过程:仅仅需要在每个plt.plot语句后加上语句plt.fill()即可。
语法:plt.fill(radius, value, color, alpha)
alpha:颜色的透明度(例如'.3'表示30%的透明度
ax4.plot(angels, values1, marker = 'o', markerfacecolor = '#7fbc41', markersize = 7, color = 'k', linewidth = 1, label = 'site1')
ax4.fill(angels, values1, color = '#7fbc41', alpha = .3) #设置颜色透明度为30%
ax4.plot(angels, values2, marker = 'o', markerfacecolor = '#c51b7d', markersize = 7, color = 'k', linewidth = 1, label = 'site2')
ax4.fill(angels, values2, color = '#c51b7d', alpha = .3)
也可以在雷达图中实现散点图的绘制,语法为:
语法2:plt.scatter(radius, value, **kwargs)
**kwargs:包含了常用的其他设置,例如:marker(标记点样式);s(标记点大小);c(标记点颜色);cmap(标记点颜色映射,以后会说明)
fig = plt.figure(figsize = (7, 7))
radii = 20*np.random.rand(50) #设置随机50个0-20的y值
theta = 2*np.pi*np.random.rand(50) #为每个点指定一个角度,即x值
colors = np.random.rand(50) #随机生成50个0-1的数值
size = 20*radii #设置每个点的大小
#默认绘制,统一大小,统一颜色,默认标记点样式
ax1 = fig.add_subplot(221, polar = True) #一定要有polar
ax1.scatter(theta, radii)
#设置标记点样式为星型,默认大小,默认颜色
ax2 = fig.add_subplot(222, polar = True)
ax2.scatter(theta, radii, marker = '*')
#改变标记点样式,改变标记点大小,默认颜色
ax3 = fig.add_subplot(223, polar = True)
ax3.scatter(theta, radii, marker = '*', s = size)
#改变标记点样式,改变大小,改变颜色,并将颜色映射到色条上
ax4 = fig.add_subplot(224, polar = True)
ax4.scatter(theta, radii, marker = '*', s = size, c = colors, cmap = mpl.cm.jet)
plt.show()
本文分享自 python数据可视化之美 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!