[英]How to scale y-axis for histogram pandas plot?
我有一整年的数据,间隔为 15 分钟,我想创建一个直方图,计算小时数而不是 15 分钟。
我有以下玩具示例代码
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.read_csv(r"D:/tmp/load.csv")
df.hist(bins=range(20,80,5))
sns.set()
plt.xlabel("Value")
plt.ylabel("count")
plt.show()
这会产生下图。
DataFrame 中的数据格式如下:
>>> df[(df["Time"] > "2021-04-10 19:45:00") & (df["Time"] < "2021-04-10 21:00:00")]
Time tag
9584 2021-04-10 20:00:00 50.3840
9585 2021-04-10 20:15:00 37.8332
9586 2021-04-10 20:30:00 36.6808
9587 2021-04-10 20:45:00 37.1840
我需要更改直方图上的 y 轴值,以便查看小时数而不是十五分钟数。 所以对于第一列,我应该看到 10 (40/4) 而不是 40。所以整个 y 轴应该除以 4。
如何在直方图中执行 y 轴的缩放? 我应该以某种方式使用plt.yticks
函数吗?
这是我对你有趣问题的看法。
我不知道在绘制数据框后重新缩放 y 轴的方法,但您可以重新缩放数据框本身。
例如,在以下玩具数据框中,测量间隔为 15 分钟,9 个值包含在 35 和 40 之间:
import pandas as pd
df = pd.DataFrame(
{
"index": [
"2021-04-10 20:00:00",
"2021-04-10 20:15:00",
"2021-04-10 20:30:00",
"2021-04-10 20:45:00",
"2021-04-10 21:00:00",
"2021-04-10 21:15:00",
"2021-04-10 21:30:00",
"2021-04-10 21:45:00",
"2021-04-10 22:00:00",
"2021-04-11 22:15:00",
"2021-04-11 22:30:00",
"2021-04-11 22:45:00",
"2021-04-11 23:00:00",
"2021-04-11 23:15:00",
"2021-04-11 23:30:00",
"2021-04-11 23:45:00",
],
"tag": [39, 36, 36, 37, 42, 28, 39, 54, 43, 38, 39, 36, 44, 27, 38, 28],
},
)
df["index"] = pd.to_datetime(df["index"], format="%Y-%m-%d %H:%M:%S")
这是相应的情节:
df.copy().set_index("index").plot(
kind="hist", bins=range(20, 80, 5), yticks=range(0, 10), grid=True
)
如果测量是按小时计算的,那么在 35-40 箱中会发现 4 个值:
因此,每小时重新调整数据帧假设:
_ = (
df.assign(
bin=pd.cut(df["tag"], bins=range(20, 60, 5)),
date=df["index"].dt.date,
hour=df["index"].dt.hour,
)
.sort_values(by=["bin", "date", "hour"])
.drop_duplicates(subset=["bin", "date", "hour"], keep="first")
.drop(columns=["bin", "date", "hour"])
.set_index("index")
.plot(kind="hist", bins=range(20, 80, 5), yticks=range(0, 5), grid=True)
)
哪个输出:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.