我试图在Seaborn中制作一个条形图,但我很难设定x轴限制.我有一个设定范围的数据,但我想将x轴限制设置为比这个更大的范围!当我try 设置x轴限制时,整个情节就会消失!这是一个可重复的小例子.创建相框:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
df = pd.Series([np.random.normal()**2 for x in range(7)], 
        pd.date_range(start = "2024-01-01", end = "2024-01-07"))

并try 创建一个条形图:

import matplotlib.dates as mdates
date_rng = pd.date_range(start = "2024-01-01", end = "2024-01-10")

date_range_mpl = mdates.date2num(date_rng)
x_vals = mdates.date2num(df.index)

fig, ax = plt.subplots(figsize = (8,4))
sns.barplot(x = x_vals, y = df.values, ax = ax)
ax.set_xlim(date_range_mpl[0] - 1, date_range_mpl[-1] + 1)

当try 设置x轴限制时,绘图在最后一行中断.

使用mdates.date2num函数的原因是Seaborn显然与pandas datetime对象不那么兼容,因此建议我首先将这些对象转换为matplotlib的datetime对象(只是浮动).我不明白为什么这个不起作用!我们将不胜感激,谢谢.

编辑:为了展示我的目标,请查看以下非海运示例:

from datetime import timedelta
date_rng = pd.date_range(start = "2024-01-01", end = "2024-01-10")
fig, ax_al = plt.subplots(figsize = (8,4))

plt.bar(x = df.index, height = df.values)
ax_al.set_xlim([date_rng[0] - timedelta(days = 1), date_rng[-1] + timedelta(days = 1)])

推荐答案

条形图的x值是从0开始的整数.

一种方法是df.reindex(),类似于:

date_rng = (date_rng.union(date_rng + 1 * date_rng.freq)
                    .union(date_rng - 1 * date_rng.freq))

fig, ax = plt.subplots(figsize = (8,4))
sns.barplot(df.reindex(date_rng), ax=ax)
fig.autofmt_xdate()

输出:

enter image description here

Python相关问答推荐

如何推迟对没有公钥的视图/表的反射?

在Python中,如何初始化集合列表脚本的输出

X射线扫描显示Docker中的pip漏洞,尽管图像中未安装pip

日程优化问题不知道更好的方式来呈现解决方案- Python / Gekko

自动编码器和极坐标

在Python中,如何才能/应该使用decorator 来实现函数多态性?

来自ARIMA结果的模型方程

如何在telegram 机器人中发送音频?

合并同名列,但一列为空,另一列包含值

如果AST请求默认受csref保护,那么在Django中使用@ system_decorator(csref_protect)的目的是什么?

ambda将时间戳与组内另一列的所有时间戳进行比较

配置Sweetviz以分析对象类型列,而无需转换

Python虚拟环境的轻量级使用

对所有子图应用相同的轴格式

如何在Python数据框架中加速序列的符号化

如何让这个星型模式在Python中只使用一个for循环?

Django—cte给出:QuerySet对象没有属性with_cte''''

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

判断solve_ivp中的事件

幂集,其中每个元素可以是正或负""""