簡體   English   中英

matplotlib當x軸相隔1周時,如何減少堆積條形圖中條形之間的空間量?

[英]matplotlib how do I reduce the amount of space between bars in a stacked bar chart when x-axis are dates 1-week apart?

import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np
x=pd.date_range(end=datetime.today(),periods=150,freq='W').to_pydatetime().tolist()
x_1 = np.random.rand(150)
x_2 = np.random.rand(150)/2
fig = plt.figure(figsize=(10,6),dpi=100)
ax=fig.add_subplot(111)
ax.bar(x,x_1,label='x_1')
ax.bar(x,x_2,label='x_2',bottom=x_1)
plt.legend()
plt.show()

上面的代碼將提供這個堆積條形圖。

堆疊圖表1

因為 x 軸被指定為相隔 1 周的日期,所以條形之間的距離非常大。

我想更改圖表,使條形圖彼此相鄰,沒有空格,如下圖所示。

x=np.arange(150)
x_1 = np.random.rand(150)
x_2 = np.random.rand(150)/2
fig = plt.figure(figsize=(10,6),dpi=100)
ax=fig.add_subplot(111)
ax.bar(x,x_1,label='x_1')
ax.bar(x,x_2,label='x_2',bottom=x_1)
plt.legend()
plt.show()

堆疊圖表2

除了作為 x 軸的數字,我仍然希望將日期保留在圖表 1 中。我想知道有沒有辦法做到這一點? 謝謝!!

造成差異的原因是 matplotlib 會在您傳遞日期時間時嘗試簡化 x 軸,因為通常您無法將每個日期都放入 x 刻度中。 它不會為 int 或 string 類型嘗試此操作,這就是您的第二個示例看起來正常的原因。

但是我無法弄清楚為什么在這個特定的例子中為什么間距如此奇怪。 我看了這個帖子沒有用。

無論如何,還有其他繪圖模塊傾向於更優雅地處理日期。

import pandas as pd
from datetime import datetime
import plotly.express as px
import numpy as np

x=pd.date_range(end=datetime.today(),periods=150,freq='W').tolist()
x_1 = np.random.rand(150)
x_2 = np.random.rand(150)/2

df = pd.DataFrame({
    'date':x,
    'x_1':x_1,
    'x_2':x_2}).melt(id_vars='date')


px.bar(df, x='date', y='value',color='variable')

輸出

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM