当前位置:   article > 正文

python之matplotlib库绘柱状图,加p值, 科研绘图模仿Sci绘图_柱状图p值

柱状图p值

一,数据导入

 这样的数据格式

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import pandas as pd
  4. import scipy
  5. #读取数据
  6. df = pd.read_excel("data.xlsx")

二,处理数据

  1. #分别读取数据,将其转化为数据框
  2. x_title = df.title.dropna().tolist() #转化为列表
  3. color = df.color.dropna().tolist()
  4. data = []
  5. for i in range(len(x_title)):
  6. value = "value{}".format(i + 1)
  7. value = df[value].dropna().tolist()
  8. data.append(value)
  9. #输出
  10. ['Control', 'ISO', 'ISO+6VT', 'ISO+12VT', 'ISO+24VT'] #x_title
  11. ['#B09C85', '#DC0000', '#00A087', '#3C5488', '#770335'] #color
  12. [[17.2, 17.9, 16.1], [31.7, 32.7, 33.8], [23.4, 24.9, 24.5], [20.1, 21.3, 20.7], [18.3, 19.9, 18.6]]#data

三,柱状图

  1. #柱状图数据前处理
  2. x = np.linspace(1, len(x_title), len(x_title)) #分类先设置为整数,便于后期优化
  3. mean = []
  4. std = []
  5. data = np.array(data)
  6. for i in data:
  7. mean.append(i.mean())#平均值
  8. std.append(i.std())#标准差
  9. ax.bar(x, mean, color='white', edgecolor=color, linewidth=1)

四,误差棒

  1. #一个一个添加误差棒
  2. for i in range(len(x_title)):
  3. ax.errorbar(x[i], mean[i], yerr=std[i], ecolor=color[i], elinewidth=1, capsize=15, capthick=1)

 

五,横坐标转化

  1. majorLocator = FixedLocator(x)
  2. minorLocator = AutoMinorLocator(len(x_title)-1)
  3. ax.xaxis.set_major_locator(majorLocator)
  4. ax.set_xticklabels(x_title)
  5. #在前面需要导入相关包, 主要作用是将x轴调均匀, 然后改变 相应位置的值

 

 六,#标注p值,plt_p函数是统计两组数据之间的p值

  1. #标注p值,plt_p函数是统计两组数据之间的p值
  2. def plt_p(a, b, c):
  3. x1 = [x[a]+0.05, x[b]-0.05]
  4. x2 = (x[a]+x[b])/2.0
  5. y1 = [c, c]
  6. y2 = c + 1
  7. ax.plot(x1, y1, color="black", linewidth=1)
  8. ax.text(x2, y2, get_p_value_r(data[a], data[b]), verticalalignment='center', horizontalalignment='center', **font_style)
  9. #然后画含p的柱状图
  10. m = 1
  11. c = (data[m].mean() + data[m].std())
  12. plt_p(0, m, c*1.35)
  13. plt_p(m, 4, c*1.35)
  14. plt_p(m, 3, c*1.2)
  15. plt_p(m, 2, c*1.05)

七,美化坐标轴

  1. #x,y轴字体设置
  2. plt.setp(ax.get_xticklabels(), rotation=45, ha="right",
  3. rotation_mode="anchor", **font_style)
  4. yticklabel_text = ax.get_yticklabels()
  5. for i, j in enumerate(yticklabel_text):
  6. j.set_family("Arial")
  7. j.set_fontsize(24)
  8. #j.set_rotation(45)
  9. ax.margins(0.25)
  10. ax.spines["right"].set_visible(False)
  11. ax.spines["top"].set_visible(False)
  12. ax.spines["right"].set_linewidth(1)
  13. ax.spines["left"].set_linewidth(1)
  14. ax.tick_params(axis="y", which="major", length=12, width=1)
  15. ax.tick_params(axis="x", which="major", length=12, width=1)
  16. ax.set_ylim(0, 50)
  17. plt.savefig("柱状图.svg", format="svg")
  18. plt.show()

八, 最终效果图

总结, 不同的柱状图, p值处理这一块存在缺陷, 不能随机应变, 颜色这一块(可以引入其他API接口)

 

        

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/426600
推荐阅读
相关标签
  

闽ICP备14008679号