在大佬的强力推荐下,最近作者开始学习《Python数据可视化之美》这本书。通过之前的学习,大家可以掌握较为简单的绘图方法。那么如何将绘制的图更加美观的显示出来呢?这也将是笔者学习的东西。接下来,让我们开始学习的新篇章吧!!!
案例:
假设我们有四组数据,分别表示四组不同的正向骨架曲线(其结果在excel中显示如下图所示),那么怎么将结果一步步的美化呢?
首先,我们先在python中画出该图。代码及结果如下:
import xlrd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
t = xlrd.open_workbook('美化数据.xls')
sheet = t.sheet_by_index(0)
x1_data=[] #需要将数据储存在空列表中才可调用绘图
y1_data=[]
x2_data=[]
y2_data=[]
x3_data=[]
y3_data=[]
x4_data=[]
y4_data=[]
for row in range(sheet.nrows):
content1 = sheet.cell_value(row,0)
x1_data.append(content1)
content2 = sheet.cell_value(row,1)
y1_data.append(content2)
content3 = sheet.cell_value(row,2)
x2_data.append(content3)
content4 = sheet.cell_value(row,3)
y2_data.append(content4)
content5 = sheet.cell_value(row, 4)
x3_data.append(content5)
content6 = sheet.cell_value(row, 5)
y3_data.append(content6)
content7 = sheet.cell_value(row, 6)
x4_data.append(content7)
content8 = sheet.cell_value(row, 7)
y4_data.append(content8)
x = [x1_data,x2_data,x3_data,x4_data]
y = [y1_data,y2_data,y3_data,y4_data]
fig = plt.figure(figsize=(4,3),dpi=100) #使用figsize设置图像大小,dpi设置分辨率
for i in range(4):
x1 = x[i]
y1 = y[i]
plt.plot(x1,y1)
tic = [0,5,10,15,20]
plt.xticks(tic)
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'
plt.show()
其结果显示如下:
美化第二步,进行相应代码添加
x = [x1_data,x2_data,x3_data,x4_data]
y = [y1_data,y2_data,y3_data,y4_data]
z = ['数据1','数据2','数据3','数据4']
fig = plt.figure(figsize=(4,3),dpi=100)
colors = ['#c41a1c', '#377eb8', '#4daf4a', '#984ea3']
markers = ['o', 's', 'H', 'D']
for i in range(4):
x1 = x[i]
y1 = y[i]
plt.plot(x1,y1,marker=markers[i],markerfacecolor=colors[i],markersize=8,markeredgewidth=0.5,color='k',linewidth=0.5,
linestyle='-',label=z[i])
其结果显示如下:
美化第三步,进行刻度线、边框线的修改。其代码修改如下:
plt.xlabel('位移',fontsize = 14)
plt.ylabel('荷载',fontsize = 14)
plt.xlim(0,20) #设置x轴范围
plt.ylim(0,90)
plt.xticks(np.linspace(0,20,11,endpoint=True),fontsize = 10)
plt.yticks(np.linspace(0,90,10,endpoint=True),fontsize = 10)
ax = plt.gca() ##删除右边和顶部的边框线
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
plt.legend(['数据1','数据2','数据3','数据4'],loc='upper left',edgecolor='none',facecolor='none')
其结果如下图所示:
以上就是美化图片的过程了,希望对大家有所帮助!!