Поместите два вложенных графика в график matplotlib - PullRequest
0 голосов
/ 16 октября 2018

У меня есть файл csv, который выглядит, например, как

SET ,A,B,C
1,1,1,1
2,2,2,2
3,3,3,3
4,4,4,4
5,5,5,5
6,6,6,6
7,7,7,7
8,8,8,8
9,9,9,9
10,10,10,7
15,20,23,17
20,30,33,27
25,40,43,37
30,50,53,47
35,60,63,57
40,70,73,67

Я использую следующее, чтобы отобразить его:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv('test.csv', sep=',')

ax = data.plot(x="SET ", y=["A"],marker='^', linestyle='--', color='#CC2936')
data.plot(x="SET ", y=["B"],ax=ax,marker='o',linestyle='-',color='#CC2936')
data.plot(x="SET ", y=["C"], ax=ax,marker='^', linestyle='--', color='#08415C')

plt.show()

Выше приведен график, который выглядит так: enter image description here

Я хотел бы добавить две маленькие вставки к этому графику: одну в верхнем левом углу (где в настоящее время находится легенда), показывающую данные от x = 0 до x =Увеличено 10, а затем еще одно в нижнем правом углу, отображающее данные от x = 30 до x = 40. Я довольно новичок в matplotlib, поэтому любая помощь приветствуется.Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Несмотря на то, что вы ответили на свой собственный вопрос хорошо, единственное отличие в моем ответе заключается в использовании условий в DataFrame при построении графика, а не в использовании срезов / индексов 3: и 6:.

Я также указываю координаты, ширину и высоту вставок вручную, а не во встроенных местах (местах), что дает мне больше свободы в том, где размещать вставки для лучшей эстетики.

fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111)
data = pd.read_csv('test.csv', sep=',')

data.plot(x="SET ", y=["A"], marker='^', linestyle='--', color='#CC2936', ax=ax)
data.plot(x="SET ", y=["B"], marker='o',linestyle='-',color='#CC2936', ax=ax)
data.plot(x="SET ", y=["C"], marker='^', linestyle='--', color='#08415C', ax=ax)
plt.legend(loc=(0.02, 0.3), fontsize = 16)

ax2 = fig.add_axes([0.2, 0.6, 0.3, 0.25])
data[data["SET "]<=10].plot(x="SET ", y=["A"], marker='^', linestyle='--', color='#CC2936', ax=ax2)
data[data["SET "]<=10].plot(x="SET ", y=["B"], marker='o',linestyle='-',color='#CC2936', ax=ax2)
data[data["SET "]<=10].plot(x="SET ", y=["C"], marker='^', linestyle='--', color='#08415C', ax=ax2)
ax2.legend_.remove()
ax2.set_xlabel("")

ax3 = fig.add_axes([0.6, 0.2, 0.27, 0.25])
data[(data["SET "]>30) & (data["SET "]<=40)].plot(x="SET ", y=["A"], marker='^', linestyle='--', color='#CC2936', ax=ax3)
data[(data["SET "]>30) & (data["SET "]<=40)].plot(x="SET ", y=["B"], marker='o',linestyle='-',color='#CC2936', ax=ax3)
data[(data["SET "]>30) & (data["SET "]<=40)].plot(x="SET ", y=["C"], marker='^', linestyle='--', color='#08415C', ax=ax3)
ax3.legend_.remove()
ax3.set_xlabel("")

enter image description here

0 голосов
/ 16 октября 2018

Благодаря документации, опубликованной @DavidG, я думаю, я понял это!

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

data = pd.read_csv('test.csv', sep=',')
set_p = data["SET "].tolist()
A = data["A"].tolist()
B = data["B"].tolist()
C = data["C"].tolist()

ax = data.plot(x="SET ", y=["A"],marker='^', linestyle='--', color='#CC2936')
data.plot(x="SET ", y=["B"],ax=ax,marker='o',linestyle='-',color='#CC2936')
data.plot(x="SET ", y=["C"], ax=ax,marker='^', linestyle='--', color='#08415C')

axins0 = inset_axes(ax, width="30%", height="30%", loc=2)
axins0.plot(set_p[:3], A[:3], marker='^', linestyle='--', color='#CC2936')
axins0.plot(set_p[:3], B[:3], marker='^', linestyle='--', color='#CC2936')
axins0.plot(set_p[:3], C[:3], marker='^', linestyle='--', color='#08415C')
axins0.tick_params(labelleft=False, labelbottom=False)

axins1 = inset_axes(ax, width="30%", height="30%", loc=4)
axins1.plot(set_p[6:], A[6:], marker='^', linestyle='--', color='#CC2936')
axins1.plot(set_p[6:], B[6:], marker='o', linestyle='-', color='#CC2936')
axins0.plot(set_p[6:], C[6:], marker='^', linestyle='--', color='#08415C')
axins1.tick_params(labelleft=False, labelbottom=False)


plt.show()

enter image description here

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