文章目录
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('时间')
-
ax1.xaxis.set_major_locator(MinuteLocator())
:- 这一行代码设置了x轴主要刻度的定位器(locator)。
MinuteLocator()
是一个刻度定位器,用于在x轴上每分钟设置一个主要刻度。这个定位器会确保每分钟都有一个主要刻度标记。
- 这一行代码设置了x轴主要刻度的定位器(locator)。
-
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轴上的刻度标签将显示为“月-日 时:分”的格式。
- 这一行代码设置了x轴主要刻度的格式化器(formatter)。
-
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('时间')
具体要求如下:
-
x轴数据类型:
- x轴的数据应该是日期时间类型,例如
pandas
的DatetimeIndex
或者datetime
对象列表。如果x轴数据不是日期时间类型,MinuteLocator
和DateFormatter
将无法正确地处理和显示时间刻度和标签。
- x轴的数据应该是日期时间类型,例如
-
数据格式:
- x轴的数据应该是连续的日期时间数据,这样
MinuteLocator
才能在适当的时间间隔处放置刻度。DateFormatter
将这些刻度格式化为指定的字符串格式,例如'%m-%d %H:%M'
。
- x轴的数据应该是连续的日期时间数据,这样
-
数据范围:
- 数据范围应该覆盖足够多的时间点,以便
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轴数据,并使用MinuteLocator
和DateFormatter
进行格式化和定位。这样可以确保在绘图时,x轴上的时间刻度和标签正确显示。