Tôi đang vẽ một biểu đồ bằng cách sử dụng matplotlib trong Python và muốn vẽ một dòng biểu thị mức trung bình của bộ dữ liệu, phủ lên trên biểu đồ dưới dạng một đường chấm chấm [hoặc có thể một số màu khác cũng sẽ làm như vậy]. Bất kỳ ý tưởng về cách vẽ một dòng được phủ lên trên biểu đồ?
Tôi đang sử dụng lệnh lô [], nhưng không chắc chắn làm thế nào để vẽ một đường thẳng đứng [nghĩa là tôi nên cung cấp giá trị nào cho trục y?
thanks!
Hỏi ngày 23 tháng 4 năm 2013 lúc 23:35Apr 23, 2013 at 23:35
user308827user308827user308827
18.9K79 Huy hiệu vàng239 Huy hiệu bạc390 Huy hiệu Đồng79 gold badges239 silver badges390 bronze badges
Bạn có thể sử dụng plot
hoặc vlines
để vẽ một đường thẳng đứng, nhưng để vẽ một đường thẳng đứng từ dưới lên trên cùng của trục y, axvline
là chức năng đơn giản nhất để sử dụng. Đây là một ví dụ:
In [80]: import numpy as np
In [81]: import matplotlib.pyplot as plt
In [82]: np.random.seed[6789]
In [83]: x = np.random.gamma[4, 0.5, 1000]
In [84]: result = plt.hist[x, bins=20, color='c', edgecolor='k', alpha=0.65]
In [85]: plt.axvline[x.mean[], color='k', linestyle='dashed', linewidth=1]
Out[85]:
Kết quả:
Đã trả lời ngày 23 tháng 4 năm 2013 lúc 23:56Apr 23, 2013 at 23:56
Warren Weckesserwarren WeckesserWarren Weckesser
106K19 Huy hiệu vàng178 Huy hiệu bạc200 Huy hiệu đồng19 gold badges178 silver badges200 bronze badges
1
Đây là chủ đề cũ và bổ sung nhỏ, nhưng một điều tôi thường thích là thể hiện giá trị trung bình bên cạnh dòng:
import numpy as np
import matplotlib.pyplot as plt
np.random.seed[6789]
x = np.random.gamma[4, 0.5, 1000]
result = plt.hist[x, bins=20, color='c', edgecolor='k', alpha=0.65]
plt.axvline[x.mean[], color='k', linestyle='dashed', linewidth=1]
min_ylim, max_ylim = plt.ylim[]
plt.text[x.mean[]*1.1, max_ylim*0.9, 'Mean: {:.2f}'.format[x.mean[]]]
Kết quả sau đó tạo ra kết quả sau đây:
rysqui
2.6692 Huy hiệu vàng18 Huy hiệu bạc25 Huy hiệu Đồng2 gold badges18 silver badges25 bronze badges
Đã trả lời ngày 24 tháng 10 năm 2018 lúc 4:41Oct 24, 2018 at 4:41
Tôi sẽ xem xét giá trị lớn nhất trong tập dữ liệu của bạn [nghĩa là các giá trị bin biểu đồ] nhân giá trị đó với một số lớn hơn 1 [giả sử 1.5] và sử dụng nó để xác định giá trị trục y. Bằng cách này, nó sẽ xuất hiện trên biểu đồ của bạn bất kể các giá trị trong biểu đồ.
Đã trả lời ngày 23 tháng 4 năm 2013 lúc 23:38Apr 23, 2013 at 23:38
Smitecsmitecsmitec
3.0291 Huy hiệu vàng15 Huy hiệu bạc12 Huy hiệu đồng1 gold badge15 silver badges12 bronze badges
1
Bạn có thể sử dụng cú pháp cơ bản sau để thêm một dòng trung bình vào một biểu đồ trong matplotlib:
import matplotlib.pyplot as plt import numpy as np #create scatter plot plt.scatter[df.x, df.y] #add horizontal line at mean value of y plt.axhline[y=np.nanmean[df.y]]
Lưu ý rằng Axhline thêm một đường ngang vào lô và Nanmean tính toán giá trị trung bình [bỏ qua NAN] trong đó đường dây nên được đặt.axhline adds a horizontal line to the plot and nanmean calculates the average value [ignoring NaNs] where the line should be placed.
Ví dụ sau đây cho thấy cách sử dụng cú pháp này trong thực tế.
Giả sử chúng ta có các gấu trúc sau đây:
import pandas as pd
#create DataFrame
df = pd.DataFrame[{'x': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
'y':[2, 5, 6, 5, 7, 8, 10, 12, 10, 9, 11, 15]}]
#view first five rows of DataFrame
df.head[]
x y
0 1 2
1 2 5
2 3 6
3 4 5
4 5 7
Chúng ta có thể sử dụng mã sau để tạo biểu đồ phân tán của x so với y và thêm một đường ngang thể hiện giá trị y trung bình: giá trị:
import matplotlib.pyplot as plt import numpy as np #create scatter plot plt.scatter[df.x, df.y] #add horizontal line at mean value of y plt.axhline[y=np.nanmean[df.y]]
Chúng ta có thể thấy rằng một dòng trung bình đã được thêm vào cốt truyện ngay phía trên giá trị y của 8.
& nbsp; Nếu chúng ta tính toán giá trị y trung bình, chúng ta sẽ thấy rằng đó là 8.333:
#calculate average y-value np.nanmean[df.y] 8.333333333
Lưu ý rằng chúng ta cũng có thể sử dụng các đối số màu sắc, dòng chính và linecolor, linestyle, and linewidth arguments to specify the color, line type, and line width of the average line, respectively:
import matplotlib.pyplot as plt import numpy as np #create scatter plot plt.scatter[df.x, df.y] #add horizontal line at mean value of y plt.axhline[y=np.nanmean[df.y], color='red', linestyle='--', linewidth=3, label='Avg']
Lưu ý: Bạn có thể tìm thấy tài liệu trực tuyến hoàn chỉnh cho hàm axhline [] ở đây.: You can find the complete online documentation for the axhline[] function here.
Tài nguyên bổ sung
Các hướng dẫn sau đây giải thích cách thực hiện các nhiệm vụ phổ biến khác trong matplotlib:
Cách thêm đường xu hướng trong matplotlib Cách vẽ một đường thẳng đứng trong matplotlib Cách vẽ nhiều dòng trong matplotlib
How to Draw a Vertical Line in Matplotlib
How to Plot Multiple Lines in Matplotlib