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

一,数据导入

 这样的数据格式

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import scipy

#读取数据
df = pd.read_excel("data.xlsx")

二,处理数据

#分别读取数据,将其转化为数据框
x_title = df.title.dropna().tolist() #转化为列表
color = df.color.dropna().tolist()
data = []
for i in range(len(x_title)):
    value = "value{}".format(i + 1)
    value = df[value].dropna().tolist()
    data.append(value)

#输出
['Control', 'ISO', 'ISO+6VT', 'ISO+12VT', 'ISO+24VT'] #x_title
['#B09C85', '#DC0000', '#00A087', '#3C5488', '#770335'] #color
[[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

三,柱状图

#柱状图数据前处理
x = np.linspace(1, len(x_title), len(x_title)) #分类先设置为整数,便于后期优化
mean = []
std = []
data = np.array(data)
for i in data:
    mean.append(i.mean())#平均值
    std.append(i.std())#标准差

ax.bar(x, mean, color='white', edgecolor=color, linewidth=1)

四,误差棒

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

 

五,横坐标转化

majorLocator = FixedLocator(x)
minorLocator = AutoMinorLocator(len(x_title)-1)

ax.xaxis.set_major_locator(majorLocator)
ax.set_xticklabels(x_title)
#在前面需要导入相关包, 主要作用是将x轴调均匀, 然后改变 相应位置的值

 

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

#标注p值,plt_p函数是统计两组数据之间的p值
def plt_p(a, b, c):
    x1 = [x[a]+0.05, x[b]-0.05]
    x2 = (x[a]+x[b])/2.0
    y1 = [c, c]
    y2 = c + 1
    ax.plot(x1, y1, color="black", linewidth=1)
    ax.text(x2, y2, get_p_value_r(data[a], data[b]), verticalalignment='center', horizontalalignment='center', **font_style)

#然后画含p的柱状图
m = 1
c = (data[m].mean() + data[m].std())
plt_p(0, m, c*1.35)
plt_p(m, 4, c*1.35)
plt_p(m, 3, c*1.2)
plt_p(m, 2, c*1.05)

七,美化坐标轴

#x,y轴字体设置
plt.setp(ax.get_xticklabels(), rotation=45, ha="right",
         rotation_mode="anchor", **font_style)

yticklabel_text = ax.get_yticklabels()
for i, j in enumerate(yticklabel_text):
    j.set_family("Arial")
    j.set_fontsize(24)
    #j.set_rotation(45)
ax.margins(0.25)

ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)
ax.spines["right"].set_linewidth(1)
ax.spines["left"].set_linewidth(1)
ax.tick_params(axis="y", which="major", length=12, width=1)
ax.tick_params(axis="x", which="major", length=12, width=1)



ax.set_ylim(0, 50)
plt.savefig("柱状图.svg", format="svg")
plt.show()

八, 最终效果图

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

 

        

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小朱朱荣咿呀咿呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值