当前位置: 首页 > news >正文

python 棒棒糖图

结果:

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import numpy as npdef lolly_plot(x, y, color_lis, breaks, back_color,title, sub_title):# 获取每个点的颜色colors = [assign_color(temperature, breaks, color_lis) for temperature in temperature_changes]# 创建图形fig, ax = plt.subplots(figsize=(10, 12))# 绘制棒棒糖ax.vlines(x=x, ymin=0, ymax=y, color=colors, alpha=0.8, linewidth=2)  # 竖线ax.scatter(x, y, color=colors, s=50, zorder=3)  # 点# 添加水平线(0℃、-0.4℃、0.8℃)ax.axhline(0.8, color=color_lis[-1], linewidth=1, alpha=0.5)ax.axhline(0.4, color=color_lis[4], linewidth=1, alpha=0.5)ax.axhline(0, color='black', linewidth=1)ax.axhline(-0.4, color=color_lis[0], linewidth=1, alpha=0.5)# 设置坐标轴ax.set_xlim(1880, 2020)ax.set_ylim(-0.5, 1.0)ax.set_xticks(np.arange(1880, 2021, 20))ax.set_yticks([-0.4, 0, 0.4, 0.8])# 去掉顶部和右侧的边框线ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)# 设置标签ax.set_title(title, fontsize=20, weight='bold', ha='left', x=0.02)ax.text(0.02, 0.99, sub_title, transform=ax.transAxes, fontsize=12, va='top', color='gray')# 设置背景颜色fig.patch.set_color(back_color)ax.patch.set_color(back_color)# 显示图像plt.tight_layout()  # 让图表更贴近边框plt.show()# 分段赋色规则(对应原图的分块颜色)
def assign_color(value, breaks, colors):"""分段赋色。小于等于第一个断点为第一个区间,大于第一个断点、小于等于第二个断点为第二个区间...,大于最后一个断点为最后一个区间。breaks:断点。 breaks至少比colors少一个。colors:颜色。从数值最低的颜色到数值最高的颜色,依次排列。"""# 从小到大,依次排列断点。breaks = list(breaks)breaks.sort(reverse=False)  # 升序排列# bisect_left: 二分法查找某个值所在的区间。(若为边界值,则落入左侧区间。)index = bisect_left(breaks, value)return colors[index]if __name__ == '__main__':# 年份数据years = np.arange(1880, 2021)# 模拟温度变化数据,接近实际趋势temperature_changes = np.zeros(len(years))# 分段设定温度变化趋势,并加入波动np.random.seed(0)temperature_changes[0:60] = np.linspace(-.5, -.2, 60) + np.random.normal(0, .05, 60)  # 1880-1940 年temperature_changes[60:100] = np.linspace(-.2, .1, 40) + np.random.normal(0, .03, 40)  # 1940-1980 年temperature_changes[100:] = np.linspace(.1, .9, len(years) - 100) + np.random.normal(0, .02, len(years) - 100)# 为每个温度区间分配颜色color_lis = ['#212B4E', '#0571B6', '#17B3BA', '#FDBE85', '#D94701', '#871A03']breaks = [-0.25, -0.1, 0, 0.3, 0.52]back_color = '#FEFAEF'# 设置标题title = "Global Land-Ocean Temperature Index"text = "Change in global surface temperature compared to the long-term average\nfrom 1951 to 1980"lolly_plot(years, temperature_changes, color_lis, breaks, back_color, title, text)


http://www.mrgr.cn/news/41819.html

相关文章:

  • python中的copy方法
  • Java - LeetCode面试经典150题 - 区间 (三)
  • 详解JavaScript中的闭包
  • 从零开始搭建UVM平台(八)-加入agent
  • Spring 框架和Spring Boot
  • Dave Cheney: Go语言之禅
  • 【AI知识点】损失函数(Loss Function)
  • “衣依”服装销售平台:Spring Boot技术驱动的创新
  • JAVA的三大特性-封装、继承、多态
  • Python--解决从Hugging Face的服务器下载某个预训练模型或其相关的文件问题
  • 手机使用指南:如何在没有备份的情况下从 Android 设备恢复已删除的联系人
  • preconnect 预解析
  • Python--导入模块报错处理
  • 【数据库差异研究】update与delete使用表别名的研究
  • 快速上手 Java:给已经学会 C++ 的开发者的指南
  • 理解无监督学习、无监督图像分割
  • <<迷雾>> 第6章 加法机的诞生(1)--全加器 示例电路
  • 【运维类资料集】实施运维方案(word)
  • PostgreSQL升级:使用pg_upgrade进行大版本(16.3)升级(17.0)
  • 想学道家智慧,误打误撞被儒家引导读《道德经》?这是怎么回事?