Python 官方文档:入门教程 => 点击学习
今天小编给大家分享一下python+Matplotlib怎么绘制双y轴图像的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。双Y
今天小编给大家分享一下python+Matplotlib怎么绘制双y轴图像的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
双Y轴图顾名思义就是在一个图里有两个Y轴。这种图形主要用来展示两个因变量和一个自变量的关系并且两个因变量的数值单位还不同。如我们想要展示不同月份公司销业绩以及成本的变化情况这时就可以用双Y轴图来展示。(因变量销量和成本具有不同的单位)。
绘制双y轴的思想,也是用到了matplotlib面向对象绘图的思想。在不指定位置的情况下,在一个画布上创建出两个坐标系,其中第一个坐标系正常创建,第二个坐标系则使用专有的twinx()方法创建。
则两个坐标系的位置重合。第一个坐标系轴在左,通过twinx()方法创建出的坐标系则轴在右。因为有了两个y轴,所以再对y轴属性进行操作的时候,则需要面向对象,如果再简单地使用plt.ylabel()等方法,则只能操作到左轴,而影响不到右轴。
下边做一个示例,首先是导包和准备数据,这里准备一组销量数据,并计算其增长率,将其体现在右轴。
具体代码如下:
import matplotlib.pyplot as plt# 生成一组数据x = range(7)y1 = [2000, 1600, 3000, 6200, 7000, 9800, 11000]y2 = [1]for i in range(len(y1)): if i+1 == len(y1): break rate = round(y1[i+1]/y1[i] - 1, 2) y2.append(rate)fig = plt.figure(figsize=(10, 8), facecolor='#ff33ff')# 字体使用楷体plt.rcParams['font.sans-serif'] = ['STKaiTI']plt.rcParams['axes.unicode_minus'] = False# 背景色为cc00ffplt.rcParams['axes.facecolor'] = '#cc00ff'ax1 = fig.add_subplot(111)plt.title('销售量及其增长率图示', color='#ffff00', fontsize=25, y=1.04)plt.xticks(x, ['1月', '2月', '3月', '4月', '5月', '6月', '7月'], color='#ffff00', fontsize=15)plt.xlabel('月份', color='#ff0033', fontsize=15)plt.yticks(color='#B22222', fontsize=15)ax1.bar(x, y1, color='#33ff66', label='left')ax1.set_ylabel('销售量(件)', color='#66ff00', fontsize=20)# 增加一条坐标轴ax2 = ax1.twinx()ax2.plot(x, y2, color='#3399ff', linestyle='--', marker='o', linewidth=2)ax2.set_ylabel("增长率", color='#66ff00', fontsize=20)ax2.tick_params(axis='y', color='green', labelsize=15, labelcolor='#B22222')for a, b in zip(x, y2): plt.text(a, b+0.02, '%.2f' % b, ha='center', va='bottom', fontsize=15, color='red')plt.show()
图像效果如下图:
具体实现代码如下
%matplotlib inlineimport matplotlib.pyplot as pltimport randomimport pandas as pdimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题#数据准备date=["一月","二月","三月","四月","五月","六月","七月","八月"]sales=[random.randint(10000,25000) for i in range(8)]cost=[int(i/100)-random.randint(1,20) for i in sales]df=pd.DataFrame(data={"销量":sales,"成本":cost},index=date) #绘制第一个Y轴fig=plt.figure(figsize=(20,8),dpi=80)ax=fig.add_subplot(111)lin1=ax.plot(df.index,df["销量"],marker="o",label="sales")ax.set_title("双Y轴图",size=20)ax.set_xlabel("时间",size=18)ax.set_ylabel("销量(件)",size=18)for i,j in df["销量"].items(): ax.text(i,j+20,str(j),va="bottom",ha="center",size=15) #绘制另一Y轴 ax1=ax.twinx()lin2=ax1.plot(df.index,df["成本"],marker="o",color="red",label="cost")ax1.set_ylabel("成本(元)",size=18) #合并图例lins=lin1+lin2labs=[l.get_label() for l in lins]ax.legend(lins,labs,loc="upper left",fontsize=15) plt.show()
图像效果如下图:
以上就是“Python+Matplotlib怎么绘制双y轴图像”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。
--结束END--
本文标题: Python+Matplotlib怎么绘制双y轴图像
本文链接: https://www.lsjlt.com/news/327035.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0