matplotlib双y轴绘图

本文通过Python进行了实际的数据可视化操作,包括使用pandas读取Excel文件并绘制销售趋势图,同时展示了如何利用matplotlib进行多维度数据展示,如菜品盈利条形图及累积比例曲线。
# -*- coding: utf-8 -*-
"""
Created on Wed Jan 31 14:06:26 2018

@author: Administrator
"""

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号

path='F:/python/3python数据分析与挖掘实战/图书配套数据、代码/chapter3/demo/data/catering_sale_all.xls'
df=pd.read_excel(path,index_col='日期')
df.plot()

path='F:/python/3python数据分析与挖掘实战/图书配套数据、代码/chapter3/demo\data/catering_dish_profit.xls'
df1=pd.read_excel(path,index_col='菜品名')
plt.figure()
df1['盈利'].plot(kind='bar')
plt.ylabel('盈利')
plt.title('菜品盈利情况')

p = df1['盈利'].cumsum() / df1['盈利'].sum()
p.plot(color='r',secondary_y=True,style='-o',linewidth=2)
plt.ylabel('盈利(比例)')


x = np.arange(0., np.e, 0.01)
y1 = np.exp(-x)
y2 = np.log(x)

fig = plt.figure()

ax1 = fig.add_subplot(111)
ax1.plot(x, y1)
ax1.set_ylabel('Y values for exp(-x)')
ax1.set_title("Double Y axis")

ax2 = ax1.twinx()  # this is the important function
ax2.plot(x, y2, 'r')
ax2.set_xlim([0, np.e])
ax2.set_ylabel('Y values for ln(x)')
ax2.set_xlabel('Same X for both exp(-x) and ln(x)')

df1
Out[44]: 
      菜品ID    盈利
菜品名             
A1   17148  9173
A2   17154  5729
A3     109  4811
A4     117  3594
A5   17151  3195
A6      14  3026
A7    2868  2378
A8     397  1970
A9      88  1877
A10    426  1782

<think> 我们正在回答用户关于MatplotlibY绘图的问题。根据用户要求,我们需要提供清晰的结构化回答,并确保所有数学公式遵循指定的LaTeX格式。 由于是技术问题,我们将分步骤说明如何实现Y,并给出代码示例。同时,按照要求,我们需要在回答末尾生成相关问题。 注意:由于用户要求参考上一次的问题和回答,但这是该问题的第一次提问,因此我们直接回答问题。 实现Y有两种常用方法: 1. 使用`twinx()`方法创建共享x的两个y。 2. 使用`subplots()`创建时指定`sharex=True`。 我们将展示第一种方法,因为它更常见。 步骤: a. 创建形和第一个。 b. 使用`twinx()`创建第二个,共享同一个x。 c. 分别在两个绘图。 d. 设置标签、标题等。 下面给出一个完整的示例代码。 </think> ### Python Matplotlib实现y绘图的方法 在Matplotlib中实现y绘图主要通过`twinx()`方法实现[^1],以下是详细步骤和示例: #### 核心方法 1. **创建基础形** 先用`plt.subplots()`创建形和第一个坐标: ```python fig, ax1 = plt.subplots(figsize=(10, 6)) ``` 2. **添加第二个y** 通过`twinx()`创建共享x的第二个y: ```python ax2 = ax1.twinx() ``` 3. **分别绘制数据** 在各自坐标绘制数据,并设置不同样式: ```python # 第一个y数据(左侧) ax1.plot(x, y1, 'g-', label='温度') ax1.set_ylabel('温度 (°C)', color='g') # 第二个y数据(右侧) ax2.plot(x, y2, 'b--', label='湿度') ax2.set_ylabel('湿度 (%)', color='b') ``` #### 完整示例代码 ```python import matplotlib.pyplot as plt import numpy as np # 生成示例数据 x = np.arange(0, 10, 0.1) y1 = np.sin(x) # 第一个数据集 y2 = np.exp(x/3) * 100 # 第二个数据集 # 创建y形 fig, ax1 = plt.subplots() ax2 = ax1.twinx() # 创建共享x的第二个y # 绘制左侧y数据 ax1.plot(x, y1, 'g-', linewidth=2) ax1.set_xlabel('时间 (s)') ax1.set_ylabel('温度 (°C)', color='g') ax1.tick_params(axis='y', labelcolor='g') # 绘制右侧y数据 ax2.plot(x, y2, 'b--', linewidth=2) ax2.set_ylabel('湿度 (%)', color='b') ax2.tick_params(axis='y', labelcolor='b') # 添加标题和例 plt.title('环境监测数据') fig.legend(loc='upper right', bbox_to_anchor=(0.9, 0.9)) plt.tight_layout() plt.show() ``` #### 关键参数说明 - `twinx()`:创建共享x的新y[^1] - `set_ylabel()`:设置各标签 - `tick_params()`:自定义刻度颜色 - `color`参数:使坐标标签与数据线颜色一致 - `fig.legend()`:合并两个例 #### 注意事项 1. 刻度范围建议使用`ax1.set_ylim(0, 40)`手动设置避免刻度重叠 2. 当数据量纲差异大时,可对第二个应用对数缩放:`ax2.set_yscale('log')` 3. 例位置需用`bbox_to_anchor`精调
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值