Создание визуализации с 2 масштабами по оси Y

#python #pandas #numpy #matplotlib

#python #pandas #numpy #matplotlib

Вопрос:

В настоящее время я пытаюсь сопоставить цену видеокарты 1080 с ценой биткойна с течением времени, но масштабы оси Y просто далеки. Пока это мой код:

 import pandas as pd
from datetime import date
import matplotlib.pyplot as plt
from matplotlib.pyplot import *
import numpy as np

GPUDATA = pd.read_csv("1080Prices.csv") 
BCDATA = pd.read_csv("BitcoinPrice.csv")

date = pd.to_datetime(GPUDATA["Date"])
price = GPUDATA["Price_USD"]

date1 = pd.to_datetime(BCDATA["Date"])
price1 = BCDATA["Close"]

plot(date, price)
plot(date1, price1)
  

И это приводит к этому:

введите описание изображения здесь

Цены на графические процессоры, конечно, указаны синим цветом, а цена биткойнов — оранжевым. Я довольно новичок в визуализации, и мне трудно найти что-либо в Интернете, что могло бы помочь мне решить эту проблему. Некоторые из предложений, которые я нашел здесь, похоже, касаются построения данных из одного источника данных, но мои данные поступают из 2 источников данных.

В одном есть записи о цене графического процессора за данный день, в другом — открытая, закрытая, высокая и низкая цена биткойна за данный день. Я изо всех сил пытаюсь найти решение, любой совет будет более чем приветствоваться! Спасибо!

Ответ №1:

То, что вы хотите сделать, это сдвоить ось X, так что оба графика будут иметь общую ось X, но отдельные оси Y. Это можно сделать таким образом:

 import numpy as np
import pandas as pd

import matplotlib.pyplot as plt

GPUDATA = pd.read_csv("1080Prices.csv") 
BCDATA = pd.read_csv("BitcoinPrice.csv")

gpu_dates = pd.to_datetime(GPUDATA["Date"])
gpu_prices = GPUDATA["Price_USD"]

btc_dates = pd.to_datetime(BCDATA["Date"])
btc_prices = BCDATA["Close"]

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()  # Create a new Axes object sharing ax1's x-axis

ax1.plot(gpu_dates, gpu_prices, color='blue')
ax2.plot(btc_dates, btc_prices, color='red')
  

Поскольку вы не предоставили образцы данных, я не могу показать соответствующую демонстрацию, но это должно сработать.

Комментарии:

1. Это отлично работает! Большое вам спасибо за объяснение этого тоже. Это очень поможет мне позже в этом проекте. Вы случайно не знаете, как также немного увеличить размер фигуры? Еще раз спасибо за вашу помощь!

2. @JackNovozinsky добро пожаловать! Если вы хотите увеличить размер фигуры, вам нужно будет передать tuple представляющий размер фигуры в дюймах figsize аргумент plt.subplots . В документации, приведенной здесь , будет объяснено больше!

3. @JackNovozinsky Я должен также добавить, что вы можете использовать sharex параметр plt.subplots для вашей текущей проблемы, но это может быть немного менее интуитивно понятным.