Как изобразить кадр данных панд на одной фигуре, не разрушая их фактическую ориентацию? - PullRequest
0 голосов
/ 06 ноября 2018

Я пытался сравнить время выполнения между Умножением наивной матрицы и Штрассена . Для этого я записывал время выполнения для другого измерения матриц. Затем я пытался отобразить результат на том же графике для сравнения.

Но проблема в том, что изображение не показывает правильный результат.

  1. Вот данные ... 2 3142 3 3531 4 4756 5 5781 6 8107

Крайний левый столбец обозначает n, размерность и крайний правый столбец обозначает время выполнения.

Приведенные выше данные относятся к Наивному методу , а данные для Штрассен тоже относятся к этому шаблону.

Я вставляю эти данные в pandas dataframe . И после нанесения данных изображение выглядит так: enter image description here

Здесь синий означает Наивный , а зеленый - Штрассена Это, безусловно, неверно, поскольку Naive не может быть постоянным. Но мой код был верным. Поэтому я решил построить их отдельно, и вот результат:

Наивная Naive

Strassen enter image description here

Как вы можете видеть, это может произойти, потому что масштабирование по оси 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 Ответ

0 голосов
/ 06 ноября 2018

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()

Результат произведен: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...