python plt 一张图两个y轴,图例legend合并

本文介绍如何使用Python的Matplotlib库绘制带有双y轴的图表,并展示了一个具体实例,该实例涉及从CSV文件读取数据并创建条形图与折线图,最后将这两类图的图例合并展示。
部署运行你感兴趣的模型镜像

参考:

【Python】matplotlib 双y轴绘制及合并图例 - Vincent丶丶 - 博客园

代码示例:

from tkinter import font
from matplotlib.font_manager import FontProperties
import numpy as np
import pandas as pd
import csv
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['KaiTi'] #或者把"SimHei"换为"KaiTi"
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
plt.style.use('/home/wzg/data1/LSTM-temporal-smooth-new2/plt_file/thu_figure.mplstyle')

data = pd.read_csv("/home/wzg/data1/LSTM-temporal-smooth-new2/"+\
    "work0_review/surveillance video anomaly detection.csv")

year = data["year"].values[:-1]
publication =  data["publication"].values[:-1]
index =  data["index"].values[:-1]

# color = 'blue'
fig = plt.figure(figsize=(15,6))
color=(188/255,155/255,254/255)

ax1 = fig.add_subplot(111)#lt.subplots(figsize=(10,6))
_bars_ = ax1.bar(year,publication,color=color,label="出版物")
ax1.set_xlabel("时间")
ax1.set_ylabel("出版物",color=color)
ax1.tick_params(axis='y',labelcolor=color)
# ax1.legend()

color=(61/255,15/255,201/255)
ax2 = ax1.twinx()
_lines_, = ax2.plot(year,index,color=color,label="被引频次")
ax2.set_ylabel("被引频次",color=color)
ax2.tick_params(axis='y',labelcolor=color)
# ax2.legend()

lns = [_bars_,_lines_]
labels = [l.get_label() for l in lns]
plt.legend(lns,labels)

plt.tight_layout()
plt.savefig("/home/wzg/data1/LSTM-temporal-smooth-new2/work0_review"+\
    "/ano_paper_trend.pdf",dpi=300)


plt.show()


注意事项:"_lines_"后面要有个逗号,否则 “_lines_.get_label()”会报错。

_lines_, = ax2.plot(year,index,color=color,label="被引频次")

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>好的,我现在需要帮助用户了解如何使用Python的matplotlib库来绘制带有x和y数据的表。首先,我得回忆一下matplotlib的基本用法,特别是pyplot模块,因为用户提到了plt,这通常是pyplot的别名。 用户可能是一个刚开始学习Python数据可视化的人,所以应该从基础步骤讲起。首先,我需要确认用户是否已经安装了matplotlib,但可能用户已经安装好了,所以直接进入导入库的部分。通常我们会导入matplotlib.pyplot as plt,以及numpy用于生成数据,或者如果用户已经有数据,可能不需要numpy。不过例子中使用numpy生成数据比较常见,可以展示一个完整的流程。 接下来,用户提到有x和y的数据,所以需要创建示例数据。例如,使用numpy的linspace生成x值,然后计算y值,比如正弦函数。这样用户可以看到如何将数据传递给绘函数。 然后,使用plt.plot()函数绘制折线,这是最基本的表类型。需要解释plot函数的参数,x和y数据的顺序。可能用户会混淆x和y的顺序,所以需要强调x在前,y在后。 之后,设置标题和标签,使用plt.title(), plt.xlabel(), plt.ylabel()。这些方法能帮助用户理解表的含义,所以这部分很重要。可能需要提醒用户中文字符显示的问题,如果出现乱码,可能需要设置字体,但这个问题可能稍微高级,暂时先不提,除非用户遇到。 然后,展示如何显示表,使用plt.show()。在脚本中这是必须的,但在Jupyter笔记本中可能需要使用%matplotlib inline魔法命令。不过用户可能是在普通脚本中运行,所以先说明plt.show()。 接下来,用户可能需要不同的表类型,比如散点、条形,所以可以补充其他例子。例如,散点plt.scatter(),条形plt.bar(),每个例子都需要数据、绘函数、标签设置和显示。 需要注意的是,代码示例的格式是否正确,确保用户能够复制粘贴运行。同时,避免使用复杂的数据处理步骤,保持简单明了。可能用户的数据是存储在列表或数组中的,所以示例中使用列表也可以,但numpy数组更常见于数值计算。 另外,要提到如何调整表样式,比如颜色、线型、标记等,但作为基础介绍,可能不需要深入,除非用户有进一步的需求。最后,确保总结关键步骤,帮助用户记忆流程:导入库、准备数据、绘制表、添加标签、显示表。 可能需要检查是否有常见的错误,比如忘记调用plt.show()导致表不显示,或者数据维度不一致等问题。但作为初步介绍,可能不需要深入讨论错误处理,保持回答简洁。 总结一下,步骤应该是:导入matplotlib和numpy,生成数据,绘制表,添加标签和标题,显示表,并提供其他表类型的示例。这样用户就能掌握基本的绘方法,并根据需要选择不同的表类型。</think>以下是使用Python matplotlib库进行二维数据可视化的基础教程,包含代码示例和关键步骤说明: ```python import matplotlib.pyplot as plt import numpy as np # 1. 准备示例数据 x = np.linspace(0, 2*np.pi, 100) # 生成0到2π之间的100个等间距点 y = np.sin(x) # 计算对应的正弦值 # 2. 创建基础折线 plt.figure(figsize=(8, 4)) # 设置像尺寸(单位英寸) plt.plot(x, y, label='sin(x)') # 绘制曲线,添加图例标签 # 3. 添加表元素 plt.title("正弦函数曲线") # 设置标题 plt.xlabel("X(弧度)") # X标签 plt.ylabel("Y数值") # Y标签 plt.grid(True) # 显示网格线 plt.legend() # 显示图例 # 4. 显示plt.show() ``` ![正弦函数曲线示例](https://via.placeholder.com/800x400.png?text=Sin+Wave+Example) 其他常见表类型示例: **散点**(适合展示数据分布): ```python plt.scatter(x, y, color='red', marker='o') plt.title("散点示例") plt.show() ``` **条形**(适合类别数据比较): ```python categories = ['A', 'B', 'C', 'D'] values = [25, 40, 30, 35] plt.bar(categories, values) plt.title("条形示例") plt.show() ``` 关键要素说明: 1. **数据准备**:x和y数据必须是等长的序列(列表/数组) 2. **表类型选择**: - `plot()`: 折线(默认连接数据点) - `scatter()`: 散点(显示独立数据点) - `bar()`: 垂直条形 3. **样式定制**: - `color`: 设置颜色(如'blue'、'#FF5733') - `linestyle`: 线型('--'虚线、':'点线) - `marker`: 数据点标记('o'圆圈、's'方块) 4. **输出控制**: - `plt.savefig('figure.png')` 保存像 - `plt.show()` 显示像(Jupyter需要配合%matplotlib inline使用) 建议学习路径: 1. 掌握基础表绘制 2. 学习多子绘制(subplots) 3. 研究样式定制(颜色、字体、网格) 4. 探索3D数据可视化(如曲面) 5. 学习与Pandas数据框的集成使用 遇到具体问题时,可进一步咨询: - 如何处理大数据集可视化? - 如何设置双Y? - 怎样添加数学公式标注? - 如何制作动态交互式表?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值