任务:有一个excel表格,想要画第2、3列的散点图,不同物种不同颜色,突出显示均值,并画出回归线。
第一步,导入包:
#-- coding : utf-8 -- import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
第二步,防止输出的图片出现乱码,并设置字体为新罗马:
plt.rcParams['font.sans-serif'] = ['Times New Roman'] # 解决中文显示问题-设置字体为新罗马 plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
第三步,设置一个颜色列表,这里的颜色列表是随机选的颜色,具体可以参考matploblib颜色列表及形状:
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b','#e377c2', '#bcbd22'] # 设置颜色列表
第四步,读取文件:
df = pd.read_csv('test.csv',header=0, index_col=None, encoding='utf-8')
第五步,绘制图像:
# 绘制图像,自定义画布(尺寸8*6)
plt.figure(figsize=(8, 6))
# 绘制回归线
sns.regplot(x='Neutral heterozygosity',y='0/4-fold heterozygosity', scatter_kws={"color": "white"}, line_kws={'color':'black'},data=df)
# 绘制散点图,其中不同物种不同颜色
i = 0
# 按物种分组
for id, dfi in df.groupby('物种', as_index=True):
# 绘制普通值散点,透明度0.5
plt.scatter(dfi['Neutral heterozygosity'], # 横坐标
dfi['0/4-fold heterozygosity'], # 纵坐标
c=colors[i], # 颜色
label=id,
alpha=0.5, #透明度
linewidths=0
) # 标签
# 绘制均值散点,透明度1
xmean = dfi['Neutral heterozygosity'].mean()
ymean = dfi['0/4-fold heterozygosity'].mean()
plt.scatter(xmean, # 横坐标
ymean, # 纵坐标
c=colors[i], # 颜色
alpha=1, #透明度
linewidths=0
) # 标签
i += 1
# 修改图例、xy轴的字体属性
plt.legend(prop={'style':'oblique', 'size': 10},) # 显示图例,设置字体属性
plt.xlabel('Neutral heterozygosity', fontdict={'weight':'semibold', 'size': 12}) #设置x坐标轴字体属性
plt.ylabel('0/4-fold heterozygosity', fontdict={'weight':'semibold', 'size': 12})
plt.show() # 显示图片
结果如下图:



