接续博文 “【Python_绘图】折线图” CSDN
功能
- 数据:读取表格(可指定Sheet表……也可指定Sheet表中的特定列)
- 绘图样式:多条折线图+散点图 → 标记点折线图
- 设置参数:设置轴标题、添加分界线等
代码
import matplotlib.pyplot as plt
import xlrd
import numpy as np
import seaborn as sns
# 设置字体格式,以显示中文
plt.rcParams['font.sans-serif'] = ['Times New Roman']
x_data = []
y1_data = []
y2_data = []
y3_data = []
y4_data = []
y5_data = []
y6_data = []
# 读取表格数据
data = xlrd.open_workbook(r'D:\mekong_NLP\作图\20210512 作图数据汇总\图三 情感折线与词云\20210606 情感分值作图表.xlsx')
table = data.sheets()[0] # 表格中的Sheet1
x_data = list(range(1971,2021,1))
x_ticks=np.arange(1971,2021,5)
#读取第x行
cap1 = table.row_values(0)
cap2 = table.row_values(1)
cap3 = table.row_values(2)
cap4 = table.row_values(3)
cap5 = table.row_values(4)
cap6 = table.row_values(5)
for i in range(0, len(x_data)):
y1_data.append(cap1[i])
for i in range(0, len(x_data)):
y2_data.append(cap2[i])
for i in range(0, len(x_data)):
y3_data.append(cap3[i])
for i in range(0, len(x_data)):
y4_data.append(cap4[i])
for i in range(0, len(x_data)):
y5_data.append(cap5[i])
for i in range(0, len(x_data)):
y6_data.append(cap6[i])
#逐条 作折线图
plt.plot(x_data, y1_data, c='crimson',linestyle=':',linewidth=2,label='China')
plt.plot(x_data, y2_data, c='coral',linestyle=':',linewidth=2,label='Myanmar')
plt.plot(x_data, y3_data, c='hotpink',linestyle=':',linewidth=2,label='Laos')
plt.plot(x_data, y4_data, c='blue',linestyle=':',linewidth=2,label='Thailand')
plt.plot(x_data, y5_data, c='lightsteelblue',linestyle=':',linewidth=2,label='Cambodia')
plt.plot(x_data, y6_data, c='cornflowerblue',linestyle=':',linewidth=2,label='Vietnam')
#逐条线 作散点图
plt.scatter(x_data, y1_data, c='crimson',s=15)
plt.scatter(x_data, y2_data, c='coral',s=15)
plt.scatter(x_data, y3_data, c='hotpink',s=15)
plt.scatter(x_data, y4_data, c='blue',s=15)
plt.scatter(x_data, y5_data, c='lightsteelblue',s=15)
plt.scatter(x_data, y6_data, c='cornflowerblue',s=15)
#修改图 相关参数
#plt.title('F1值随迭代次数的变化')
plt.xticks(x_ticks)
plt.tick_params(labelsize=16)#横纵标签大小
plt.xlabel('Year',size=16)
plt.ylabel('Sentiment score',size=16)
plt.ylim(ymin=-0.80, ymax=0.80)
plt.vlines(1991, -0.8, 0.8, colors="black", linestyles="dashed",linewidth=1)#分界线
plt.vlines(1994, -0.8, 0.8, colors="black", linestyles="dashed",linewidth=1)
plt.vlines(2008, -0.8, 0.8, colors="black", linestyles="dashed",linewidth=1)
plt.vlines(2015, -0.8, 0.8, colors="black", linestyles="dashed",linewidth=1)
leg=plt.legend(columnspacing=1,fontsize=16)#图例
leg.get_frame().set_linewidth(0.0)#不显示右边与上边线
sns.despine()#不显示右边与上边线
plt.show()#绘图
效果示例
附:使线贴合纵轴
- 参考:python作图图形不贴着坐标轴?python作图图形不贴着坐标轴? - 知乎
- 增添以下代码即可:
plt.xlim(1971,2021)