добавить новые оси в графике Python - PullRequest
0 голосов
/ 14 мая 2018

У меня есть следующий фрейм данных, содержащий данные различного типа

df = pandas.DataFrame(data=[
        [20,69.262295,0.458615,244],
        [40,52.049180,0.105605,488],
        [60,37.380628,0.037798,733],
        [80,28.659161,0.018166,977],
        [100,23.013923,0.004136,1221]],
        columns=['percentage','confidence','threshold','size'])

df
Out[121]: 
   percentage  confidence  threshold  size
0          20   69.262295   0.458615   244
1          40   52.049180   0.105605   488
2          60   37.380628   0.037798   733
3          80   28.659161   0.018166   977
4         100   23.013923   0.004136  1221

Сначала я хотел бы построить график в процентах относительно достоверности

fig = plt.figure()
plt.plot(df['percentage'],df['confidence'])
plt.ylabel('confidence')
plt.xlabel('percent of population')     

enter image description here

Затем я хотел бы изменить эту цифру следующим образом:

  • заменить тики процентами и доверительными отношениями в моем фрейме данных
  • добавить новую ось y слева, представляющуюсоответствующий порог для каждой достоверности
  • добавьте новую ось x вверху, представляющую соответствующий размер для каждого процента

enter image description here

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Вы можете попробовать так:

x = df['percentage']
y = df['confidence']
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_ylabel('confidence')
ax1.plot(x, y)
ax2 = ax1.twinx()
ax3 = ax1.twiny()
ax2.set_ylabel('threshold')
ax2.set_ylim(df['threshold'].max(), df['threshold'].min())
ax3.set_xlabel('size')
ax3.set_xlim(df['size'].min(), df['size'].max())
0 голосов
/ 14 мая 2018

Мой подход заключается в том, чтобы просто продублировать существующие оси и назначить им разные метки галочек, а именно метки двух последующих столбцов:

fig = plt.figure()
plt.plot(df['percentage'],df['confidence'])
plt.ylabel('confidence')
plt.xlabel('percent of population')
plt.xticks(df['percentage'])
plt.yticks(df['confidence'])
yt = plt.yticks()
yl = plt.ylim()
plt.twinx()
plt.yticks(yt[0], df['threshold'])
plt.ylim(yl)
plt.ylabel('threshold')
xt = plt.xticks()
xl = plt.xlim()
plt.twiny()
plt.xticks(xt[0], df['size'])
plt.xlim(xl)
plt.xlabel('size')
plt.tight_layout()

enter image description here

0 голосов
/ 14 мая 2018

Ключ состоит в том, чтобы дублировать оси и зафиксировать пределы осей как для оригинальной, так и для дублированной, чтобы отметки были выровнены.

fig, ax = plt.subplots(figsize=(16, 9))
ax.plot(df['percentage'],df['confidence'], marker='o')
ax.set_ylabel('confidence')
ax.set_xlabel('percent of population')

ax.set_xticks(df['percentage'])
ax.set_xticklabels(df['percentage'])
# Force the xaxis limits
ax.set_xlim(df['percentage'].min(), df['percentage'].max())

ax.set_yticks(df['confidence'])
ax.set_yticklabels(["{:.2f}".format(x) for x in df['confidence']])
ax.set_ylim(df['confidence'].min(), df['confidence'].max())

# Duplicate the xaxis, sharing the y one
ax2 = ax.twiny()

# We set the ticks location to 'percentage'
ax2.set_xticks(df['percentage'])
# But we annotate with 'size'
ax2.set_xticklabels(df['size'])
ax2.set_xlabel('size')
# Here too we fix the xaxis limits
ax2.set_xlim(df['percentage'].min(), df['percentage'].max())

# Same for the secondary Y axis
ax3 = ax.twinx()
ax3.set_yticks(df['confidence'])
ax3.set_yticklabels(["{:.2f}".format(x) for x in df['threshold']])
ax3.set_ylabel('threshold')
ax3.set_ylim(df['confidence'].min(), df['confidence'].max())


plt.show()

Результат:

Result

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