Как изобразить кадр данных панд на одной фигуре, не разрушая их фактическую ориентацию?
Я пытался сравнить время выполнения между умножением наивной матрицы и умножением Штрассена. Для этого я записывал время выполнения для другого измерения матриц. Затем я пытался представить результат в том же графике для сравнения.
Но проблема в том, что сюжет не показывает правильный результат.
- Вот данные...
2 3142 3 3531 4 4756 5 5781 6 8107
Крайний левый столбец обозначает n
Размер и крайний правый столбец обозначают время выполнения.
Приведенные выше данные относятся к наивному методу, а данные по Штрассену тоже по этой схеме.
Я вставляю эти данные в фрейм данных панд. И после нанесения данных изображение выглядит так:
Здесь синий - для Наивного, а зеленый - для Штрассена. Это, конечно, неверно, поскольку Наивный не может быть постоянным. Но мой код был верным. Поэтому я решил построить их отдельно, и вот результат:
Как вы можете видеть, это может произойти, потому что масштабирование по оси Y не то же самое? Это причина?
Код, который я реализую для построения графиков:
fig = plt.figure()
data_naive = pd.read_csv('naive.txt', sep="\t", header=None)
data_naive.columns = ["n", "time"]
plt.plot(data_naive['n'], data_naive['time'], 'g')
data_strassen = pd.read_csv('strassen.txt', sep="\t", header=None)
data_strassen.columns = ["n", "time"]
plt.plot(data_strassen['n'], data_strassen['time'], 'b')
plt.show()
fig.savefig('figure.png')
Что я пытался отработать?
fig = plt.figure()
data_naive = pd.read_csv('naive.txt', sep="\t", header=None)
data_naive.columns = ["n", "time"]
data_strassen = pd.read_csv('strassen.txt', sep="\t", header=None)
data_strassen.columns = ["n", "time"]
ax = data_naive.plot(x='n', y='time', c='blue', figsize=(20,10))
data_strassen.plot(x='n', y='time', c='green', figsize=(20,10), ax=ax)
plt.savefig('comparison.png')
plt.show()
Но не повезло!!!
Как изобразить их на одной фигуре, не меняя их фактической ориентации?
1 ответ
IIUC: вот решение с использованием twinx
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(np.random.randint(10, 100, (12,2)))
df[1] = np.random.dirichlet(np.ones(12)*1000., size=1)[0]
fig, ax1 = plt.subplots()
ax1.plot(df[0], color='r')
#Plot the secondary axis in the right side
ax2 = ax1.twinx()
ax2.plot(df[1], color='k')
fig.tight_layout()
plt.show()