Làm thế nào để bạn vẽ một đường thẳng đứng trên một cốt truyện chuỗi thời gian ở Gấu trúc?


81
  • Làm thế nào để bạn vẽ một đường thẳng đứng ( vlines) trong một âm mưu chuỗi Pandas?
  • Tôi đang sử dụng Gấu trúc để vẽ các phương tiện lăn, v.v. và muốn đánh dấu các vị trí quan trọng bằng một đường thẳng đứng.
  • Có thể sử dụng vlineshoặc một cái gì đó tương tự để thực hiện điều này không?
  • Trong trường hợp này, trục x là datetime.

Câu trả lời:


110
plt.axvline(x_position)

Phải mất những âm mưu tiêu chuẩn tùy chọn định dạng ( linestlye, color, vv)

(doc)

Nếu bạn có tham chiếu đến axesđối tượng của mình :

ax.axvline(x, color='k', linestyle='--')

3
Có, bạn có quyền truy cập vào đối tượng trục ax = s.plot (), trong đó s là gấu trúc. Series
joao

41

Nếu bạn có trục thời gian và bạn đã nhập Gấu trúc dưới dạng pd, bạn có thể sử dụng:

ax.axvline(pd.to_datetime('2015-11-01'), color='r', linestyle='--', lw=2)

Đối với nhiều dòng:

xposition = [pd.to_datetime('2010-01-01'), pd.to_datetime('2015-12-31')]
for xc in xposition:
    ax.axvline(x=xc, color='k', linestyle='-')

Tôi có một âm mưu 3 ngày và tất cả những gì tôi đã làm là: xposition = [pd.to_datetime('01/04/2016'), pd.to_datetime('02/04/2016'),pd.to_datetime('03/04/2016')]sau đó for xc in xposition: ax.axvline(x=xc, color='k', linestyle='-'). Và tôi nhận: ValueError: ordinal must be >= 1.. Chuyện gì vậy?
FaCoffee

@FaCoffee, ngày tháng của bạn có định dạng khác với ví dụ được đưa ra trong câu trả lời, mặc dù tôi không biết điều đó sẽ tạo ra sự khác biệt như thế nào.
RufusVS

Tôi muốn vẽ một đường thẳng đứng trên một biểu đồ cột chuỗi thời gian cho mỗi ngày, bất kỳ sự trợ giúp nào được không?
Ikbel benab

12

Hàm âm mưu DataFrame trả về AxesSubplotđối tượng và trên đó, bạn có thể thêm bao nhiêu dòng tùy thích. Hãy xem mẫu mã bên dưới:

%matplotlib inline

import pandas as pd
import numpy as np

df = pd.DataFrame(index=pd.date_range("2019-07-01", "2019-07-31"))  # for sample data only
df["y"] = np.logspace(0, 1, num=len(df))  # for sample data only

ax = df.plot()
# you can add here as many lines as you want
ax.axhline(6, color="red", linestyle="--")
ax.axvline("2019-07-24", color="red", linestyle="--")

nhập mô tả hình ảnh ở đây


2

matplotlib.pyplot.vlines

  • Đối với một chuỗi thời gian, ngày cho trục phải là đối tượng ngày giờ thích hợp , không phải chuỗi.
  • Cho phép một hoặc nhiều vị trí
  • ymin& ymaxđược chỉ định dưới dạng giá trị y cụ thể, không phải dưới dạng phần trămylim
  • Nếu tham chiếu axesvới một cái gì đó như fig, axes = plt.subplots(), sau đó thay đổi plt.xlinesthànhaxes.xlines

plt.plot() & sns.lineplot()

from datetime import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns  # if using seaborn

plt.style.use('seaborn')  # these plots use this style

# configure synthetic dataframe
df = pd.DataFrame(index=pd.bdate_range(datetime(2020, 6, 8), freq='1d', periods=500).tolist())
df['v'] = np.logspace(0, 1, num=len(df))

# plot
plt.plot('v', data=df, color='magenta')

y_min = df.v.min()
y_max = df.v.max()

plt.vlines(x=['2020-07-14', '2021-07-14'], ymin=y_min, ymax=y_max, colors='purple', ls='--', lw=2, label='vline_multiple')
plt.vlines(x=datetime(2021, 9, 14), ymin=4, ymax=9, colors='green', ls=':', lw=2, label='vline_single')
plt.legend(bbox_to_anchor=(1.04, 0.5), loc="center left")
plt.show()

nhập mô tả hình ảnh ở đây

df.plot()

df.plot(color='magenta')

ticks, _ = plt.xticks()
print(f'Date format is pandas api format: {ticks}')

y_min = df.v.min()
y_max = df.v.max()

plt.vlines(x=['2020-07-14', '2021-07-14'], ymin=y_min, ymax=y_max, colors='purple', ls='--', lw=2, label='vline_multiple')
plt.vlines(x='2020-12-25', ymin=y_min, ymax=8, colors='green', ls=':', lw=2, label='vline_single')
plt.legend(bbox_to_anchor=(1.04, 0.5), loc="center left")
plt.show()

nhập mô tả hình ảnh ở đây

phiên bản gói

import matplotlib as mpl

print(mpl.__version__)
print(sns.__version__)
print(pd.__version__)

[out]:
3.3.1
0.10.1
1.1.0


Làm thế nào bạn thêm nền màu xám với lưới màu trắng? Không thể tìm ra nó từ mã
Tobias Kolb

1
plt.style.use('seaborn')
Trenton McKinney
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.