Hướng dẫn how do you plot multiple y in python? - làm thế nào để bạn vẽ nhiều y trong python?

Giới thiệu

Matplotlib là một trong những thư viện trực quan hóa dữ liệu được sử dụng rộng rãi nhất trong Python. Từ trực quan đơn giản đến phức tạp, đó là thư viện đi đến hầu hết.

Trong hướng dẫn này, chúng ta sẽ xem xét cách vẽ nhiều sơ đồ dòng trong matplotlib - trên cùng một Axes hoặc Figure.

Nếu bạn muốn đọc thêm về âm mưu vẽ các lô dòng nói chung, cũng như tùy chỉnh chúng, hãy đảm bảo đọc hướng dẫn của chúng tôi về các sơ đồ sơ đồ các lô với matplotlib.

Vẽ nhiều lô nhiều dòng trong matplotlib

Tùy thuộc vào kiểu bạn đang sử dụng, kiểu OOP hoặc MATLAB, bạn sẽ sử dụng thể hiện plt hoặc phiên bản ax để vẽ, với cùng một cách tiếp cận.

Để vẽ nhiều sơ đồ dòng trong matplotlib, bạn chỉ cần gọi liên tục chức năng plot(), sẽ áp dụng các thay đổi cho cùng một đối tượng Figure:

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6]
y = [2, 4, 6, 5, 6, 8]
y2 = [5, 3, 7, 8, 9, 6]

fig, ax = plt.subplots()

ax.plot(x, y)
ax.plot(x, y2)
plt.show()

Không cần đặt bất kỳ cờ tùy chỉnh nào, ColorMap mặc định sẽ được áp dụng, vẽ cả hai ô dòng trên cùng một đối tượng Figure và điều chỉnh màu để phân biệt giữa chúng:

Bây giờ, chúng ta hãy tạo một số chuỗi ngẫu nhiên bằng cách sử dụng Numpy và tùy chỉnh các biểu đồ dòng một chút bằng cách đặt một màu cụ thể cho mỗi người và ghi nhãn chúng:

import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()

Chúng tôi không phải cung cấp các giá trị trục x cho biểu đồ dòng, trong trường hợp đó, các giá trị từ

import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
2 sẽ được áp dụng, trong đó
import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
3 là yếu tố cuối cùng trong dữ liệu bạn đang vẽ. Trong trường hợp của chúng tôi, chúng tôi đã có hai chuỗi dữ liệu -
import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
4 và
import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
5, cả hai sẽ được vẽ trên cùng một trục x.

Trong khi vẽ đồ thị, chúng tôi đã gán màu cho chúng, sử dụng đối số

import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
6 và nhãn cho truyền thuyết, sử dụng đối số
import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
7. Kết quả này trong:

Vẽ nhiều lô nhiều dòng với các thang đo khác nhau

Đôi khi, bạn có thể có hai bộ dữ liệu, phù hợp với các lô dòng, nhưng giá trị của chúng khác nhau đáng kể, khiến cho việc so sánh cả hai dòng. Ví dụ, nếu

import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
4 có chuỗi số tăng theo cấp số nhân, trong khi
import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
5 có trình tự tăng tuyến tính - chắc chắn và đủ nhanh,
import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
4 sẽ có các giá trị lớn hơn rất nhiều so với
import matplotlib.pyplot as plt
import numpy as np

line_1 = np.random.randint(low = 0, high = 50, size = 50)
line_2 = np.random.randint(low = -15, high = 100, size = 50)

fig, ax = plt.subplots()

ax.plot(line_1, color = 'green', label = 'Line 1')
ax.plot(line_2, color = 'red', label = 'Line 2')
ax.legend(loc = 'upper left')
plt.show()
5, mà cái sau mờ đi.

Chúng ta hãy sử dụng Numpy để thực hiện chuỗi số tăng theo cấp số nhân và vẽ nó bên cạnh một dòng khác trên cùng một Axes, tuyến tính:

import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()

Chạy mã này dẫn đến:

Sự tăng trưởng theo cấp số nhân trong

import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()
3 đi ra khỏi tỷ lệ rất nhanh và có vẻ như hoàn toàn không có sự khác biệt trong
import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()
4, vì nó rất nhỏ so với xu hướng theo cấp số nhân của chuỗi khác.

Bây giờ, chúng ta hãy vẽ

import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()
3 trên thang đo logarit, sẽ tạo ra một đường thẳng trực quan, vì quy mô Y sẽ tăng theo cấp số nhân. Nếu chúng ta vẽ nó theo thang đo logarit và
import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()
4 chỉ tăng theo cùng một hằng số, chúng ta sẽ có hai dòng chồng chéo và chúng ta sẽ chỉ có thể nhìn thấy một đường được vẽ sau lần đầu tiên.

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Chúng ta hãy thay đổi

import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()
4 một chút để làm cho nó có thể quan sát được khi chúng ta vẽ cả hai:

import matplotlib.pyplot as plt
import numpy as np

# Sequences
linear_sequence = [1, 2, 3, 4, 5, 6, 7, 10, 15, 20]
exponential_sequence = np.exp(np.linspace(0, 10, 10))

fig, ax = plt.subplots()

# Plot linear sequence, and set tick labels to the same color
ax.plot(linear_sequence, color='red')
ax.tick_params(axis='y', labelcolor='red')

# Generate a new Axes instance, on the twin-X axes (same position)
ax2 = ax.twinx()

# Plot exponential sequence, set scale to logarithmic and change tick color
ax2.plot(exponential_sequence, color='green')
ax2.set_yscale('log')
ax2.tick_params(axis='y', labelcolor='green')

plt.show()

Lần này, chúng ta sẽ phải sử dụng giao diện OOP, vì chúng ta đang tạo một phiên bản Axes mới. Một Axes có một thang đo, vì vậy chúng tôi tạo ra một tỷ lệ mới, ở cùng một vị trí với mức đầu tiên và đặt thang đo của nó thành một tỷ lệ logarit và vẽ trình tự theo cấp số nhân.

Kết quả này trong:

Chúng tôi cũng đã thay đổi các màu nhãn đánh dấu để phù hợp với màu của các biểu đồ dòng, nếu không, thật khó để phân biệt dòng nào ở quy mô nào.

Vẽ nhiều sơ đồ các lô với nhiều trục y

Cuối cùng, chúng ta có thể áp dụng cùng một thang đo (tuyến tính, logarit, v.v.), nhưng có các giá trị khác nhau trên trục y của mỗi biểu đồ dòng. Điều này đạt được thông qua việc có nhiều trục y, trên các đối tượng Axes khác nhau, ở cùng một vị trí.

Ví dụ,

import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()
4 sẽ không vượt quá 20 trên trục y, trong khi
import matplotlib.pyplot as plt
import numpy as np

linear_sequence = np.linspace(0, 10, 10)
# [0, 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 10]
exponential_sequence = np.exp(linear_sequence)
# [1.00e+00, 3.03e+00, 9.22e+00, 2.80e+01, 8.51e+01, 2.58e+02, 7.85e+02, 2.38e+03, 7.25e+03, 2.20e+04]

fig, ax = plt.subplots()

ax.plot(linear_sequence)
ax.plot(exponential_sequence)
plt.show()
3 sẽ lên đến năm 2000. Chúng ta có thể vẽ cả hai một cách tuyến tính, chỉ bằng cách vẽ chúng trên các đối tượng Axes khác nhau, ở cùng một vị trí, mỗi trong số đó Đặt tick trục y tự động để chứa dữ liệu chúng tôi đang cung cấp:

import matplotlib.pyplot as plt
import numpy as np

# Sequences
linear_sequence = [1, 2, 3, 4, 5, 6, 7, 10, 15, 20]
exponential_sequence = np.exp(np.linspace(0, 10, 10))

fig, ax = plt.subplots()

# Plot linear sequence, and set tick labels to the same color
ax.plot(linear_sequence, color='red')
ax.tick_params(axis='y', labelcolor='red')

# Generate a new Axes instance, on the twin-X axes (same position)
ax2 = ax.twinx()

# Plot exponential sequence, set scale to logarithmic and change tick color
ax2.plot(exponential_sequence, color='green')
ax2.tick_params(axis='y', labelcolor='green')

plt.show()

Một lần nữa, chúng tôi đã tạo ra một Axes khác ở cùng một vị trí với vị trí đầu tiên, vì vậy chúng tôi có thể vẽ trên cùng một vị trí trong Figure nhưng các đối tượng Axes khác nhau, cho phép chúng tôi đặt giá trị cho từng trục y.

Không cần đặt quy mô y thành logarit lần này, cả hai sẽ được vẽ tuyến tính:

Sự kết luận

Trong hướng dẫn này, chúng tôi đã đi qua cách vẽ nhiều lô hàng trên cùng một Figure hoặc Axes trong matplotlib và python. Chúng tôi đã đề cập đến cách vẽ trên cùng một Axes với cùng một tỷ lệ và trục y, cũng như cách vẽ trên cùng một Figure với các thang trục Y khác nhau và giống hệt nhau.

Nếu bạn quan tâm đến trực quan hóa dữ liệu và không biết bắt đầu từ đâu, hãy đảm bảo kiểm tra gói sách của chúng tôi về trực quan hóa dữ liệu trong Python:

Trực quan hóa dữ liệu trong Python với matplotlib và pandas là một cuốn sách được thiết kế để đưa những người mới bắt đầu tuyệt đối đến gấu trúc và matplotlib, với kiến ​​thức python cơ bản và cho phép họ xây dựng một nền tảng mạnh mẽ cho các thư viện với các thư viện đơn giản đến nút. is a book designed to take absolute beginners to Pandas and Matplotlib, with basic Python knowledge, and allow them to build a strong foundation for advanced work with theses libraries - from simple plots to animated 3D plots with interactive buttons.

Nó phục vụ như một hướng dẫn chuyên sâu, sẽ dạy cho bạn mọi thứ bạn cần biết về gấu trúc và matplotlib, bao gồm cách xây dựng các loại cốt truyện không được tích hợp vào thư viện.

Trực quan hóa dữ liệu trong Python, một cuốn sách dành cho người mới bắt đầu đến các nhà phát triển Python trung gian, hướng dẫn bạn thông qua thao tác dữ liệu đơn giản với gấu trúc, bao gồm các thư viện âm mưu cốt lõi như Matplotlib và Seaborn, và chỉ cho bạn cách tận dụng các thư viện khai báo và thử nghiệm như Altair. Cụ thể hơn, trong khoảng 11 chương, cuốn sách này bao gồm 9 thư viện Python: gấu trúc, matplotlib, Seaborn, Bokeh, Altair, Plotly, Ggplot, Geopandas và Vispy., a book for beginner to intermediate Python developers, guides you through simple data manipulation with Pandas, cover core plotting libraries like Matplotlib and Seaborn, and show you how to take advantage of declarative and experimental libraries like Altair. More specifically, over the span of 11 chapters this book covers 9 Python libraries: Pandas, Matplotlib, Seaborn, Bokeh, Altair, Plotly, GGPlot, GeoPandas, and VisPy.

Nó phục vụ như một hướng dẫn thực tế, độc đáo về trực quan hóa dữ liệu, trong rất nhiều công cụ bạn có thể sử dụng trong sự nghiệp của mình.

Làm thế nào để bạn vẽ nhiều trục y trong python?

Sử dụng phương thức Subplots (), tạo một hình và một tập hợp các ô con. Biểu đồ [1, 2, 3, 4, 5] Các điểm dữ liệu trên thang trục Y trái. Sử dụng phương thức Twinx (), tạo một trục song sinh với trục X được chia sẻ nhưng trục Y độc lập, AX2. Biểu đồ [11, 12, 31, 41, 15] Các điểm dữ liệu trên thang trục Y phải, với màu xanh.

Làm thế nào để bạn vẽ hai giá trị y trong python?

Cách dễ nhất để tạo biểu đồ matplotlib với hai trục y là sử dụng hàm Twinx ().use the twinx() function.

Làm thế nào để bạn vẽ nhiều dữ liệu trong một biểu đồ trong Python?

Trong matplotlib, chúng ta có thể vẽ nhiều biểu đồ trong một lô theo hai cách ...
NROWS, NCOLS: Chúng cung cấp số lượng hàng và cột tương ứng.....
Sharex, Sharey: Các tham số này chỉ định về các thuộc tính được chia sẻ giữa trục a và y ..

Làm thế nào để bạn vẽ nhiều tính năng trong Python?

Bạn có thể vẽ nhiều dòng từ dữ liệu được cung cấp bởi DataFrame trong Python bằng matplotlib.Bạn có thể làm điều đó bằng cách chỉ định các cột khác nhau của DataFrame là tham số trục x và y trong hàm matplotlib.pyplot.plot ().specifying different columns of the dataframe as the x and y-axis parameters in the matplotlib. pyplot. plot() function.