python绘图常见问题及解决方法总结

本文介绍了如何解决多图绘制中的标题重叠问题,调整坐标轴倾斜,实现二维箱型图按指定顺序排序,减少图片空白,设置总标题以及在时序数据中以固定时间间隔显示x轴。使用了Matplotlib和Seaborn库进行Python数据分析和可视化。
摘要由CSDN通过智能技术生成

1. 多个图片绘制到一起时出现title和xstick重合

在这里插入图片描述

fig, axes = plt.subplots(6, 2, figsize=(20, 40))
# Adjust the layout padding
plt.subplots_adjust(hspace=0.5, wspace=0.4)
# Plotting scatter plots for Tiu and ws_up/ws_down vs each load variable
for i, load_var in enumerate(load_variables):
    # Tiu vs Load Variable
    sns.scatterplot(x='Tiu', y=load_var, data=data, ax=axes[i, 0])
    axes[i, 0].set_title(f'Scatter Plot of Tiu vs {load_var}', fontsize=10)
    # ws_up/ws_down vs Load Variable
    sns.scatterplot(x='ws_up/ws_down', y=load_var, data=data, ax=axes[i, 1])
    axes[i, 1].set_title(f'Scatter Plot of ws_up/ws_down vs {load_var}', fontsize=10)
plt.tight_layout()
plt.show()

修改代码plt.tight_layout(pad=12),具体大小,可以按照具体间距进行调整
在这里插入图片描述

2. 坐标轴需要倾斜

plt.xticks (rotation=45)

3. 二维箱型图按我指定的坐标排序

import seaborn as sns
import matplotlib.pyplot as plt

# 假设 'data_yl' 是您的数据框,'col' 是您想要绘制的列
# order = ["us_1", "ne_2", "ws_3", "vs_8", "vs_9", "s_6", "ws_4", "s_5", "s_7", "vus_0"]
# 指定顺序
order = ["vus_0", "us_1", "ne_2", "ws_3", "ws_4", "s_5", "s_6", "s_7", "vs_8", "vs_9"]

# 绘制箱型图
sns.boxplot(x='MO cal_label', y=col, data=data_yl, order=order)

# 显示图形
plt.show()

4. 图片两边空白太大

通过plt.show()显示的图片,如果直接通过图片下方的保存按钮进行保存,那么这个空白会被原样的保存下来。
在这里插入图片描述
通过下面的方法,可以去除上图右侧的空白。

plt.savefig(r'F:\02-data\03-wind_profile\test.png', bbox_inches='tight', pad_inches=0.02)

5. 给多个图片设置一个总的 title

在这里插入图片描述

6. x轴以固定时间间隔显示(时序数据)

6.1 讲解

下面这段代码设置了x轴的刻度格式,具体作用如下:

ax1.xaxis.set_major_locator(MinuteLocator())
ax1.xaxis.set_major_formatter(DateFormatter('%m-%d %H:%M'))
ax1.set_xlabel('时间')
  1. ax1.xaxis.set_major_locator(MinuteLocator())

    • 这一行代码设置了x轴主要刻度的定位器(locator)。MinuteLocator()是一个刻度定位器,用于在x轴上每分钟设置一个主要刻度。这个定位器会确保每分钟都有一个主要刻度标记。
  2. ax1.xaxis.set_major_formatter(DateFormatter('%m-%d %H:%M'))

    • 这一行代码设置了x轴主要刻度的格式化器(formatter)。DateFormatter('%m-%d %H:%M')是一个日期格式化器,用于将日期和时间格式化为字符串。'%m-%d %H:%M'表示日期和时间的格式,其中%m是月份(两位数字),%d是日期(两位数字),%H是小时(24小时制),%M是分钟(两位数字)。这样,x轴上的刻度标签将显示为“月-日 时:分”的格式。
  3. ax1.set_xlabel('时间')

    • 这一行代码设置x轴的标签为“时间”。它为x轴添加了一个描述性的标签,以便于读者理解x轴代表的含义。

综上所述,这段代码的作用是为x轴设置以分钟为间隔的主要刻度,并将刻度标签格式化为“月-日 时:分”的形式,同时为x轴添加“时间”标签。这样做有助于在绘制涉及时间数据的图表时清晰地展示时间信息。

6.2 数据要求

使用下面的代码时,对数据的要求是x轴的数据必须是日期时间类型的数据,这样才能正确地应用时间格式化和定位器:

ax1.xaxis.set_major_locator(MinuteLocator())
ax1.xaxis.set_major_formatter(DateFormatter('%m-%d %H:%M'))
ax1.set_xlabel('时间')

具体要求如下:

  1. x轴数据类型

    • x轴的数据应该是日期时间类型,例如pandasDatetimeIndex或者datetime对象列表。如果x轴数据不是日期时间类型,MinuteLocatorDateFormatter将无法正确地处理和显示时间刻度和标签。
  2. 数据格式

    • x轴的数据应该是连续的日期时间数据,这样MinuteLocator才能在适当的时间间隔处放置刻度。DateFormatter将这些刻度格式化为指定的字符串格式,例如'%m-%d %H:%M'
  3. 数据范围

    • 数据范围应该覆盖足够多的时间点,以便MinuteLocator能够设置多个刻度。如果时间数据过于稀疏,可能不会显示出预期数量的刻度。

示例代码展示了如何创建符合要求的数据,并使用上述代码进行绘图:

import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.dates import MinuteLocator, DateFormatter
import numpy as np

# 生成示例数据
date_rng = pd.date_range(start='2024-01-01', end='2024-01-02', freq='T')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randn(len(date_rng))

# 创建图表
fig, ax1 = plt.subplots()

# 绘制数据
ax1.plot(df['date'], df['data'])

# 设置x轴的主要刻度和格式
ax1.xaxis.set_major_locator(MinuteLocator())
ax1.xaxis.set_major_formatter(DateFormatter('%m-%d %H:%M'))
ax1.set_xlabel('时间')

# 倾斜 x 轴标签
for label in ax1.get_xticklabels():
    label.set_rotation(45)
    label.set_horizontalalignment('right')

# 调整子图边距,避免标签被截断
plt.subplots_adjust(bottom=0.3)

plt.show()

在这个示例中,date_rng生成了从2024年1月1日到2024年1月2日的按分钟间隔的日期时间数据。然后,这些数据被用作x轴数据,并使用MinuteLocatorDateFormatter进行格式化和定位。这样可以确保在绘图时,x轴上的时间刻度和标签正确显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值