当plt.plot只有一个参数时,参数类型必须为一维列表或数组,如:plt.plot(a) ,此时将a中的值作为y坐标输出,x是列表的索引,如0,1,2,...
为图加x轴、y轴、标题、网格
plt.xlabel('this is axis x') # 增加x轴描述
plt.ylabel('this is axis y') # 增加y轴描述
plt.title('this is an example') # 增加标题
plt.grid('True') #增加网格
图片保存成文件:
plt.savefig(文件名,dpi=600) dpi:每一英寸空间中包含的点数,点数越多,图像质量越好。
默认生成的图像格式为png格式。
指定xy轴范围:
1 折线图
语法:plt.plot(x, y, format_string, **kwargs) 其中:x,y是坐标;format_string:曲线风格设置;
**kwargs:更多组曲线的参数设置
(1)format_string包括线的颜色,具体取值如下:
(2)format_string包括线的风格,具体取值如下:
(3)format_string包括线的标记类型,具体取值如下:
(4)示例:
import matplotlib.pyplot as plt
import numpy as np
a=np.arange(0,10,0.5)
plt.plot(a,a*a,'r--o',a,a*3,'b-+')#同时画出两组折线
plt.show()
format_string参数由前面介绍的颜色、风格、标记字符组成的字符串,前后顺序无所谓
如果图例在图框内挡住了图内折线图,可以使用plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))让图例显示在图像框的右边中间位置,如果不设置x轴和y轴刻度,Matplotlib会根据数据的范围和分布自动选择刻度值,通常是为了使图表在视觉上更加清晰和易于理解。
import matplotlib.pyplot as plt
import matplotlib
# 给排水韧性得分数据
years = [2018, 2019, 2020, 2021, 2022]
# 给排水韧性得分数据
years = [2018, 2019, 2020, 2021, 2022]
beijing_scores = [
0.7015249,
0.7050914,
0.6975382,
0.6926983,
0.6853141
]
tianjin_scores = [
0.5347513,
0.52457875,
0.52163833,
0.52692574,
0.51883376
]
shijiazhuang_scores=[0.39309645,
0.3396231,
0.33959764,
0.3378727,
0.33196145
]
tangshan_scores=[0.3645677,
0.3489927,
0.35373002,
0.36235777,
0.37836656
]
qinghuangdao_scores=[0.27253038,
0.27180696,
0.27120438,
0.27080676,
0.27056554
]
handan_scores=[0.27918392,
0.2741323,
0.27979,
0.2771336,
0.2819476
]
xingtai_scores=[0.27041742,
0.27190825,
0.27921104,
0.27195877,
0.27921104
]
baoding_scores=[0.271643,
0.29644614,
0.2727402,
0.27024028,
0.27097106
]
zhangjiakou_scores=[0.27091658,
0.27064,
0.27050504,
0.2704541,
0.27113265
]
chengde_scores=[0.27214766,
0.27139995,
0.2711886,
0.27160594,
0.27190205
]
cangzhou_scores=[0.27154785,
0.27062717,
0.2711461,
0.27204153,
0.2723538
]
langfang_scores=[0.2718553,
0.2707805,
0.27094406,
0.2708508,
0.27129725
]
hengshui_scores=[0.27027622,
0.27028304,
0.27090845,
0.27102357,
0.27094215
]
matplotlib.rcParams['font.family']=['SimHei']
# 创建折线图
plt.figure(figsize=(4, 4)) # 设置图形大小
plt.plot(years, beijing_scores, marker='o',label='北京',linewidth=1) # 绘制折线图,'o'表示点的形状
plt.plot(years, tianjin_scores, label='天津', marker='x', color='r',linewidth=1)
plt.plot(years, shijiazhuang_scores, label='石家庄', marker='s', color='k',linewidth=1)
plt.plot(years, tangshan_scores, label='唐山', marker='^', color='g',linewidth=1)
plt.plot(years, qinghuangdao_scores, label='秦皇岛', marker='p', color='y',linewidth=1)
plt.plot(years, handan_scores, label='邯郸', marker='s', color='r',linewidth=1)
plt.plot(years, xingtai_scores, label='邢台', marker='D', color='m',linewidth=1)
plt.plot(years, baoding_scores, label='保定', marker='*', color='orange',linewidth=1)
plt.plot(years, zhangjiakou_scores, label='张家口', marker='p', color='k',linewidth=1)
plt.plot(years, chengde_scores, label='承德', marker='^', color='brown',linewidth=1)
plt.plot(years, cangzhou_scores, label='沧州', marker='s', color='green',linewidth=1)
plt.plot(years, langfang_scores, label='廊坊', marker='h', color='c',linewidth=1)
plt.plot(years, hengshui_scores, label='衡水', marker='s', color='gray',linewidth=1)
# 添加标题和标签
# plt.title('给排水韧性得分')
plt.xlabel('年份',fontsize=12)
plt.ylabel('给排水韧性得分',fontsize=12)
#plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1])
plt.xticks([2018, 2019, 2020, 2021, 2022])
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.savefig('resilience_scores.png', dpi=800, format='png', bbox_inches='tight')
# 显示图形
plt.show()
2 柱状图
plt.bar(x, height, width=0.8, bottom=None, \*, align='center', data=None, \*\*kwargs)
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei' # 添加中文字体
x_np=[0,1.5,3,4.5]
x=np.array(x_np)
xticks=['Accuracy','F1','Precision','Recall']
svm=[0.9354,0.8835,0.9143,0.8571]
dt=[0.8968,0.8636,0.8235,0.9286]
rf=[0.8889,0.8650,0.8254,0.9101]
nb=[0.7548,0.6695,0.6768,0.6623]
mlp=[0.8344,0.7257,0.8168,0.6552]
plt.bar(x - 0.2, svm, width=0.2, label='SVM')
plt.bar(x, rf, width=0.2, label='RF')
plt.bar(x + 0.2, dt, width=0.2, label='DT')
plt.bar(x + 0.4, nb, width=0.2, label='NB')
plt.bar(x + 0.6, mlp, width=0.2, label='MLP')
plt.xticks(x, xticks)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.title('不同分类器性能对比')
plt.xlabel('指标',fontsize=14)
plt.ylabel('值',fontsize=14)
# 显示图形
plt.show()
3 子图
plt.subplot(a,b,i) 生成一个a行,b列的绘图区,其后绘制的图像绘制到第i区(逗号可以省略)
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,20)
plt.subplot(2,3,1)# 也可以写成 plt.subplot(231),以下同
plt.plot(x,np.exp(x))
plt.subplot(2,3,2)
plt.plot(x,-x**2-2*x)
plt.subplot(2,3,3)
plt.plot(x,np.log(x))
plt.subplot(2,3,4)
plt.plot(x,np.sin(x))
plt.subplot(2,3,5)
plt.plot(x,np.sin(x)+np.cos(x))
plt.subplot(2,3,6)
plt.plot(x,np.sin(x)+np.cos(x**2))
4 饼状图
语法:matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, \*, data=None)
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei' # 添加中文字体
label=['教授','副教授','讲师','助教'] # 饼状图中每个分块的类别
size=[10,40,35,15] #每个类别所占的百分比数
explode=[0,0,0.1,0] #每个类别突出显示程度
plt.pie(size,labels=label,explode=explode,shadow=True, autopct='%0.1f%%')
plt.axis('equal') # 设置坐标轴等比例
plt.legend() # 增加图例
plt.show()
其中:autopct='%0.1f%% 表示在饼图中显示数据的比例,保留一位小数。shadow=True表示为饼图添加阴影
5 散点图
语法:plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs)
import numpy as np
import matplotlib.pyplot as plt
x1=np.random.randn(100)
y1=np.random.randn(100)
x2=np.random.randn(100)
y2=np.random.randn(100)
plt.scatter(x1,y1,marker='o',color='red')
plt.scatter(x2,y2,marker='+',color='blue')
plt.legend(['boy','girl'])
plt.show()
6 中文显示问题
(1)第一种方法:全局修改
rcParams是自定义图形的各种默认属性,称之为rc配置或rc参数。通过rc参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。可以选择的常用字体有'SimHei':中文黑体 'Kaiti': 中文楷体 'LiSu' :中文隶书 'Fangsong' :中文仿宋
这种设置方法会修改程序中所有的图
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']=['SimHei']
plt.plot([1,1,6,4,5])
plt.title('画折线的例子') # 加标题描述
plt.xlabel('这是x轴') # 为x轴加文字描述
plt.ylabel('这是y轴') # 为y轴加文字描述
(2)第二种方法:在有中文输入的地方增加fontproperties='SimHei'的设置。
plt.title('这是标题',fontproperties='SimHei',FontSize=20)