Python使用Matplotlib库绘制双y轴图形(柱状图+折线图)

这篇具有很好参考价值的文章主要介绍了Python使用Matplotlib库绘制双y轴图形(柱状图+折线图)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天是第一次写踩坑日记系列,这个系列用来记录在Python和R学习过程中遇到的问题和结果。今天介绍的是使用Python的matplotlib库绘制两个y轴图的一些基本用法与踩坑行为。希望可以帮助到大家,也希望大家可以给出建议,欢迎留言交流。

Matplotlib介绍

Matplotlib是Python数据分析中常用的可视化工具,也是其他高级绘图接口(如seaborn, HoloViews, ggplot等)和专业绘图工具(如Cartopy)的基础。Matplotlib可以创建出版质量的图形,制作交互式的图形,自定义视觉风格和布局,导出到多种文件格式,嵌入在JupyterLab和图形用户界面中。更多探索内容请查看Matplotlib官网或Matplotlib中文网。

安装

pip install matplotlib

绘图元素

以下是 Matplotlib 图形的组件,来自于Matplotlib官网,详细使用方法查看快速入门指南 — Matplotlib 3.7.1 文档。 python双y轴的折线图,python

设置标题或轴名称等文本标签内容时,如果含有中文字符出现乱码的情况,需要添加以下代码,如果仍然无法解决,可以尝试将SimHei字体改为FangSong等其他字体。

plt.rcParams['font.sans-serif']=['SimHei'] # 用来设置字体样式以正常显示中文标签(黑体)

如果数字为负数,也可能会乱码,解决方法为:

plt.rcParams['axes.unicode_minus']=False

Matplotlib提供了多种图形,包括基本的柱状图、折线图、散点图、箱线图、散点图、饼图等,还提供了极坐标图、3D图形等高级的可视化图形(如果不想看官方文档,可以查看知乎上的一篇文章学习绘制以上图形的基本方法),可以通过以上参数对图像细节进行修改,并且可以对各种图形进行组合。

双y轴图

画单y轴图

import numpy as np  
import matplotlib.pyplot as plt

# 生成一些示例数据
x = np.arange(10)
y = np.random.randint(0,20,10)

# 绘制折线图,设置颜色
plt.plot(x,y,color='blue')
# 设置x轴和y轴的标签,指明坐标含义
plt.xlabel('x轴', fontdict={'size': 16})
plt.ylabel('y轴', fontdict={'size': 16})
#设置图标题
plt.title('折线图')

# 设置中文显示
plt.rcParams['font.sans-serif']=['SimHei']
#展示图片
plt.show()

python双y轴的折线图,python
#画柱状图
plt.bar(x,y,color='blue')#只要将以上代码中的`plot`改为`bar`
python双y轴的折线图,python

双y轴折线图

import numpy as np  
import matplotlib.pyplot as plt

# 生成一些示例数据
x = np.arange(10)
y1 = np.random.randint(10, size=10)
y2 = np.random.randint(10, size=10)

# 创建一个图形和两个y轴
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
#绘制折线图
line1 = ax1.plot(x, y1,label='y1轴', color='royalblue', marker='o', ls='-.')
line2 = ax2.plot(x, y2, label='y2轴', color='tomato', marker=None, ls='--')

# 设置x轴和y轴的标签,指明坐标含义
ax1.set_xlabel('x轴', fontdict={'size': 16})
ax1.set_ylabel('y1轴',fontdict={'size': 16})
ax2.set_ylabel('y2轴',fontdict={'size': 16})
#添加图表题
plt.title('双y轴折线图')
#添加图例
plt.legend()
# 设置中文显示
plt.rcParams['font.sans-serif']=['SimHei']
#展示图片
plt.show()
python双y轴的折线图,python

解决图例 通过以上方式设置的图例没有y1轴,并且也没有出现报错信息,说明两个图例都显示出来的,很有可能就是y2轴的图例将y1轴图例覆盖了。通过将两轴的图例分开显示后证明确实是覆盖掉了

#将`plt.legend()`改为以下代码
ax1.legend(loc='upper right')
ax2.legend(loc='upper left')
python双y轴的折线图,python

但是两个图例分开显示也太丑了,还是希望可以将图例组合到一起

lines = line1 + line2  
labels = [h.get_label() for h in lines]
plt.legend(lines, labels, loc='upper right')
python双y轴的折线图,python

设置轴 感觉这样看着有点不方便,如果把轴和线的颜色一致可能要好看一些

#设置轴标签颜色  
ax1.tick_params('y', colors='royalblue')
ax2.tick_params('y', colors='tomato')
#设置轴颜色
ax1.spines['left'].set_color('royalblue')
ax2.spines['left'].set_color('royalblue')
ax1.spines['right'].set_color('tomato')
ax2.spines['right'].set_color('tomato')
python双y轴的折线图,python

两个y轴的颜色改变确实要好看一点,但是上轴线有点突兀,把它去掉

ax1.spines['top'].set_visible(False)  
ax2.spines['top'].set_visible(False)
python双y轴的折线图,python

柱状图+折线图

把上边的y2改为柱状图,绘制柱状图与折线图双y轴图

import numpy as np  
import matplotlib.pyplot as plt
# 生成一些示例数据
x = np.arange(10)
y1 = np.random.randint(10, size=10)
y2 = np.random.randint(10, size=10)
# 创建一个图形和两个y轴
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
#绘制图形
bar = ax1.bar(x, y1, label='y1轴', color='tomato', width=0.4)
line = ax2.plot(x, y2,label='y2轴', color='royalblue', marker='o', ls='-.')
# 设置x轴和y轴的标签,指明坐标含义
ax1.set_xlabel('x轴', fontdict={'size': 16})
ax1.set_ylabel('y1轴',fontdict={'size': 16})
ax2.set_ylabel('y2轴',fontdict={'size': 16})
#添加图表题
plt.title('双y轴折线图')
#添加图例
lines = line + bar
labels = [h.get_label() for h in lines]
plt.legend(lines, labels, loc='upper right')
#设置轴标签颜色
ax1.tick_params('y', colors='royalblue')
ax2.tick_params('y', colors='tomato')
#设置轴颜色
ax1.spines['left'].set_color('royalblue')
ax2.spines['left'].set_color('royalblue')
ax1.spines['right'].set_color('tomato')
ax2.spines['right'].set_color('tomato')
#去掉上轴线
ax1.spines['top'].set_visible(False)
ax2.spines['top'].set_visible(False)
# 设置中文显示
plt.rcParams['font.sans-serif']=['SimHei']
#展示图片
plt.show()

哎嗨,报错了。matplotlib柱状图的返回值是一个BarContainer元组对象,而折线图的返回值是一个Line2D列表对象。 python双y轴的折线图,pythonpython双y轴的折线图,python

使用matplotlib.pyplot.plot()函数来绘制一条折线,并将其返回值赋给一个变量,需要注意plot()函数返回的是一个包含一个Line2D对象的列表,而不是一个Line2D对象本身。所以,你需要在变量后面加上一个逗号,或者在使用get_label()方法时指定列表的索引为0,才能正确地获取Line2D对象的标签。所以将以上#绘制图形 模块改为

 
#绘制图形
bar = ax1.bar(x, y1, label='y1轴', color='tomato', width=0.4)
line, = ax2.plot(x, y2,label='y2轴', color='royalblue', marker='o', ls='-.')

python双y轴的折线图,python

好了,今天的踩坑日记就到这里了,对于图的其它修改细节,大家可以自己尝试一下,多试试总能发现不同的坑。

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-613933.html

到了这里,关于Python使用Matplotlib库绘制双y轴图形(柱状图+折线图)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】Matplotlib绘制折线图

    1.Matplotlib画图简单实现 Matplotlib在一个绘制2D图片的库 2.折线图 2.1绘制折线图 接下来逐步对折线图进行修改 2.2设置线的格式 2.3设置折点 2.4.图片的保存和导出 2.5设置刻度 2.6显示中文 matplotlib只显示应为,无法显示中文,需要修改matplotlib的默认字体 通过matplotlib下的font_mange

    2023年04月09日
    浏览(82)
  • 超详细的Python matplotlib 绘制柱状图

    Python 为数据展示提供了大量优秀的功能包,其中 matplotlib 模块可以方便绘制制作折线图、柱状图、散点图等高质量的数据包。 关于 matplotlib 模块,我们前期已经对matplotlib进行基本框架、以及常用方法的学习 Python matplotlib 绘制饼图_ python matplotlib绘制折线图_ python入门到进阶,

    2023年04月08日
    浏览(62)
  • python基础----08-----json、pyecharts模块介绍以及折线图、地图、柱状图的绘制

    json就是 一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互、类似于: 国际通用语言 -英语。 pyecharts模块 :如果想要 做出数据可视化效果图,可以借助pyecharts模块来完成。 概况: Echarts是个由百度开源的数据可视化,凭借着良好的交互性,精巧的

    2024年02月08日
    浏览(50)
  • python读取excel数据并用双y轴绘制柱状图和折线图,柱子用渐变颜色填充

    往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机生成数据并用双y轴绘制两条带误差

    2024年02月10日
    浏览(47)
  • Python学习笔记(11-2):matplotlib绘图——图形绘制函数

    因为部分图形绘制函数共用了一套参数体系,在颜色、曲线形状等部分的使用方式也是一致的。所以,在讲解各类图形绘制之前,我们整体性地对各类通用参数进行一个整理,并在此基础上对于颜色(color)、数据点标记(marker)和曲线形式(linestyle)等几个通用参数进行相

    2024年02月06日
    浏览(58)
  • 【100天精通Python】Day64:Python可视化_Matplotlib绘制误差线图、填充图、堆叠面积图,示例+代码

            误差线图用于可视化一个或多个数据集的测量值及其相关误差或不确定性。每个数据点可能有不同的误差范围,这些误差可以表示为上下误差条、对称误差、非对称误差等。通常,误差线图用于比较多个实验条件或数据源之间的差异。 (1) 上下误差条(Vertica

    2024年02月07日
    浏览(56)
  • python的matplotlib绘制动态图形(用animation中的FuncAnimation)

    %matplotlib auto # 数据透视表: # 统计各月每天的刷卡金额之和 # month_day_df = pd.pivot_table(data_df,values=\\\"刷卡金额\\\",index=\\\"日\\\",columns=\\\"月份\\\",aggfunc=np.sum) # 用折线图表示1月份每天的刷卡金额之和 import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # 导入动画库 import random import

    2023年04月18日
    浏览(48)
  • 基于python的matplotlib、numpy库实现的图形绘制(数据可视化)

    1.题目要求 编写程序,绘制正弦曲线和余弦曲线。 提示:利用numpy的linspace()、sin()或cos()函数生成样本数据、正弦或余弦值。 2.函数讲解及代码  3.运行图样 4.扩展 1.题目要求 已知实验中学举行了高二期中模拟考试,考试后分别计算了全体男生、女生各科的平均成绩,统计结

    2024年02月08日
    浏览(61)
  • 数据可视化神器!Matplotlib Python教程 | 从入门到精通绘制各种类型的图形和保存图形

    大家好,我是爱吃熊掌的鱼,今天我要给大家带来一篇有趣开朗的Matplotlib Python教程。Matplotlib是Python中最流行的数据可视化库之一,它可以帮助我们将数据转化为易于理解的图表和图形。无论你是初学者还是专业人士,Matplotlib都是一个非常有用的工具。让我们开始吧! 在开

    2023年04月21日
    浏览(47)
  • python气象数据可视化学习笔记8——利用matplotlib和ERA5数据绘制时间-高度气象综合廓线图

    气象预报业务中,有种常用的综合廓线图,其本质上是单个站点时间-高度的等高线或者填色图,其中时间是从右到左来看。所以准备好(time, level)的二维数据,然后依次叠加线条和填色就可以,思路很简单,但是绘图中涉及到了很多细节问题,也是琢磨了一阵子,怕以后忘了

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包