【代码复刻】SCI论文分组柱状图代码复刻

介绍

在这里插入图片描述

上图表示2000年,2010年,2020年,2030年以及2040年的土地利用分类变化统计图,带有误差棒,线性拟合为建设用地的变化情况。

代码如下


# 导入绘图库
import matplotlib.pyplot as plt
import numpy as np

# 设置全局的字体大小和样式
plt.rcParams["font.size"] = 12
plt.rcParams["font.family"] = "Arial"
plt.figure(figsize=(10,6), dpi=300)

# 设置数据
year = np.array([2000, 2010, 2020, 2030, 2040]) # 年份
arable = np.array([1000, 900, 800, 700, 600]) # 耕地面积
wood = np.array([800, 700, 600, 500, 400]) # 林地面积
grass = np.array([600, 500, 400, 300, 200]) # 草地面积
water = np.array([400, 400, 400, 400, 400]) # 水域面积
urban = np.array([200, 300, 400, 500, 600]) # 城市用地面积

# 设置误差棒的值,这里假设为10%的标准差
arable_err = arable * 0.1
wood_err = wood * 0.1
grass_err = grass * 0.1
water_err = water * 0.1
urban_err = urban * 0.1

# 设置柱子的宽度和颜色
bar_width = 1
colors = ["#ed7d31", "#ffc000", "#70ad46", "#9e480d", "#987300"]

# 去除外边框
plt.box(False)

# 设置标题,横轴和纵轴的标签,图例的位置,刻度的范围和间隔,网格的样式
plt.title("Fig.3. Statistics of LULC changes")
plt.xlabel("Year")
plt.ylabel("Area (km^2)")
plt.legend(loc="upper center", bbox_to_anchor=(0.5,-0.15), ncol=6) # 将图例位置还原到下方中间,并设置三列显示
plt.xticks(np.arange(2000 , 2050 , step=10))
plt.yticks(np.arange(0 , 1200 , step=200))
plt.grid(axis="y" , linestyle="--",zorder=0)# 将网格线放置在最底层

# 绘制分组柱状图,每个柱子都有标签
plt.bar(year - bar_width * 4, arable, width=bar_width, color=colors[0], label="Arable land") # 增加横轴的偏移量
plt.bar(year - bar_width * 2.5, wood, width=bar_width, color=colors[1], label="Wood land")
plt.bar(year - bar_width * 1 , grass , width=bar_width , color=colors[2] , label="Grass land")
plt.bar(year + bar_width * 0.5 , water , width=bar_width , color=colors[3] , label="Water body")
plt.bar(year + bar_width * 2 , urban , width=bar_width , color=colors[4] , label="Urban land")

# 绘制误差棒,使用黑色的竖线和横线,并设置透明度为0.5
plt.errorbar(year - bar_width * 4 , arable , yerr=arable_err , fmt="none" , ecolor="black" , elinewidth=1 , capsize=3 , alpha=0.5)
plt.errorbar(year - bar_width * 2.5 , wood , yerr=wood_err , fmt="none" , ecolor="black" , elinewidth=1 , capsize=3 , alpha=0.5)
plt.errorbar(year - bar_width * 1 , grass , yerr=grass_err , fmt="none" , ecolor="black" , elinewidth=1 , capsize=3 , alpha=0.5)
plt.errorbar(year + bar_width * 0.5 , water , yerr=water_err , fmt="none" , ecolor="black" , elinewidth=1 , capsize=3 , alpha=0.5)
plt.errorbar(year + bar_width * 2 , urban , yerr=urban_err , fmt="none" , ecolor="black" , elinewidth=1 , capsize=3 , alpha=0.5)

# 绘制城市用地的线性趋势线,使用np.polyfit函数拟合一次多项式,并设置颜色和标签
urban_fit = np.polyfit(year , urban , deg=1)
urban_line = np.poly1d(urban_fit)
plt.plot(year , urban_line(year) , color="#987814" , label="Urban land trend",linestyle="--",alpha=0.5)

# 修改图例的显示顺序
handles, labels = plt.gca().get_legend_handles_labels()
new_order = [1, 2, 3, 4,5,0 ]  # 新的显示顺序,根据需要调整
plt.legend([handles[idx] for idx in new_order], [labels[idx] for idx in new_order], loc="upper center", bbox_to_anchor=(0.5,-0.15), ncol=6)

# 调整子图之间的间距
plt.subplots_adjust(left=0.1, right=0.9, bottom=0.2, top=0.9)

# 保存图片到本地
plt.savefig("LULC.png")

# 显示图片
plt.show()

运行结果

在这里插入图片描述

颜色的话是用的Snipate软件进行提取的。这个截图软件很好用,需要的话可以自行下载,也可以从下面方式获取,公众号里面会持续更新一些好看的SCI绘图代码和以下论文笔记,欢迎大家一起交流学习!
请添加图片描述
感谢大家花时间来阅读本文,小编水平有限,有失误之处请大家斧正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GIS探险家

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

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

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

打赏作者

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

抵扣说明:

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

余额充值