Нормализовать оси, чтобы получить квадрат - PullRequest
0 голосов
/ 29 июня 2019

Рассмотрим следующую серию

lift = {}
lift['correct']=[0.0, 10.0, 18.0, 34.0, 44.0, 58.0, 66.0, 76.0, 84.0, 86.0, 88.0, 92.0, 92.0, 94.0, 98.0, 98.0, 100.0, 100.0, 100.0, 100.0, 100.0]
lift['avg'] = [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0]

fig, ax = plt.subplots()
fig.canvas.draw()

handles = []
handles.append(ax.plot(lift['correct'], 'r-', label='Percent Correct'))
handles.append(ax.plot(lift['avg'], 'b-', label='Average Case'))
ax.set_xlabel('Total Population (%)')
ax.set_ylabel('Number of Respondents (%)')
ax.set_ylim([0, 100])

num_xticks = 20
xtick_step = 100/num_xticks
ax.set_xticks([int(v) for v in range(0,num_xticks+1)])
ax.set_xticklabels([int(v*xtick_step) for v in range(0,num_xticks+1)])
#question 1
#ax.set_xlim([0, 100])
#fig.gca().set_aspect('equal', adjustable='box')

#question 2
#num_yticks = 20
#ytick_step = 100/num_yticks
#ax.set_yticks([int(v) for v in range(0,num_yticks+1)])
#ax.set_yticklabels([int(v*ytick_step) for v in 
#   range(0,num_yticks+1)])
fig.legend(handles, labels=[h[0].get_label() for h in handles])
fig.show()

Что я получу, это this plot

Я бы хотел, чтобы 2 оси были нормализованы, чтобы график выглядел квадратным наобе оси как это enter image description here Я попробовал закомментированные строки Q1 и получил this

Вопрос 1. Как я могу правильно получить квадратные оси?

Вопрос 2. Как я могу разделить ось y галочками, аналогичными осям x, с интервалом, скажем, шаг 10 или шаг 5. Я попробовал закомментированные строки Q2 и получил это Q2

Вопрос 3. fig.legend(handles, labels=[h[0].get_label() for h in handles]) не отображает никаких легенд!?

Вопрос 4. Любой альтернативный и более простой подход для достижения желаемого результата приветствуется.Я следовал онлайн-примерам и чувствую, что мой нынешний подход не настолько интуитивен, особенно с точки зрения разделения на fig и ax

1 Ответ

1 голос
/ 29 июня 2019

При построении x против y, не забудьте указать x.

import matplotlib.pyplot as plt

lift = {}
lift['correct']=[0.0, 10.0, 18.0, 34.0, 44.0, 58.0, 66.0, 76.0, 84.0, 86.0, 88.0, 92.0, 92.0, 94.0, 98.0, 98.0, 100.0, 100.0, 100.0, 100.0, 100.0]
lift['avg'] = [0.0, 5.0, 10.0, 15.0, 20.0, 25.0, 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0, 95.0, 100.0]

fig, ax = plt.subplots()

ax.plot(lift['avg'], lift['correct'], 'r-', label='Percent Correct')
ax.plot(lift['avg'], lift['avg'],  'b-', label='Average Case')
ax.set_xlabel('Total Population (%)')
ax.set_ylabel('Number of Respondents (%)')

ax.set_aspect("equal")
ax.legend()

plt.show()

enter image description here

...