仅在多个数据帧的绘图图表中存在值的情况下在 xticks 中显示日期

Show dates in xticks only where value exist in plot chart of multiple dataframes

我有一个关于 xticks 的 matplotlib 问题。我想隐藏所有那些没有出现的值。我实际上做到了,但是对于第二组值(红色图表)。我找到了如何隐藏特定数据框,但不是 2 个或更多。

这是我的代码:

plt.subplots(figsize=(2, 1), dpi=400)
width = 0.005

xlim = np.arange(0, 1, 0.01)
ylim = np.arange(0, 0.1, 0.001)


plt.xticks(density_2.index.unique(), rotation=90, fontsize=1.5)
plt.yticks(density_2.unique(), fontsize=2)
plt.bar(density_1.index, density_1, width, color='Green', label=condition_1,alpha=0.5)
plt.bar(density_2.index, density_2, width, color='Red', label=condition_2,alpha=0.5)
plt.legend(loc="upper right", fontsize=2)
plt.show()

Link 我在哪里看到了解决方案:show dates in xticks only where value exist in plot chart and hide unnecessary interpolated xtick labels

非常感谢您!

您需要找到 density_1density_2 两个报价列表的交集,如 reported here.
工作示例:

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

N = 150

values_1 = np.random.randint(low = 5, high = 75, size = N)/100
density_1 = pd.DataFrame({'density_1': values_1})
density_1 = density_1.value_counts().sort_index(ascending = True)
density_1.index = sorted(list(set(values_1)), reverse = False)

values_2 = np.random.randint(low = 35, high = 100, size = N)/100
density_2 = pd.DataFrame({'density_2': values_2})
density_2 = density_2.value_counts().sort_index(ascending = True)
density_2.index = sorted(list(set(values_2)), reverse = False)

width = 0.005
condition_1 = 'Adele'
condition_2 = 'Extremoduro'


fig, ax = plt.subplots(figsize = (10, 5))

ax.bar(density_1.index, density_1, width, color = 'Green', label = condition_1, alpha = 0.5)
ax.bar(density_2.index, density_2, width, color = 'Red', label = condition_2, alpha = 0.5)

ax.legend(loc = 'upper right')

ax.set_xticks(list(set(density_1.index.unique()) & set(density_2.index.unique())), rotation = 90)

plt.show()

行中:

list(set(density_1.index.unique()) & set(density_2.index.unique()))

你可以 select ticks 这同时适用于 density_1density_2.

放大: