Я пытаюсь сделать диаграмму ARC, используя Python, но я не могу получить равномерную высоту - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь сделать диаграмму ARC, используя python matplotlib.Но я не могу получить равномерную высоту в идеале высота = Радиус / 2.Я использую scipy.intepolate, чтобы сгладить мою кривую.Поэтому я не могу отрегулировать свой рост в соответствии с вышеупомянутой информацией, то есть 'height = Radius / 2'.

Я хочу, чтобы моя ARC была одинаковой по высоте, как показано на рисунке в ссылке ниже:https://datavizcatalogue.com/methods/images/top_images/arc_diagram.png

Ниже приведен код, который я использовал

import matplotlib.pyplot as plt
%matplotlib notebook
import numpy as np
from scipy import interpolate
count=[0,15,63,7,90,10]
y=[0,3,0]
plt.figure(figsize=(40,10))
x = [1,4,7]
start=x[-1]
for i in range(len(count)):

   if i==0:
      x = [1,4,7]
   else:
     x[0]=start
     x[1]=x[0]+3
     x[2]=x[1]+3

   x2 = np.linspace(x[0], x[-1], 2000)
   y2 = interpolate.pchip_interpolate(x, y, x2)
   plt.plot(x2, y2,linewidth=(0.1+(count[i]/10)),color='green',alpha=0.6)
   ax.append(x[0])
   start=x[-1]
   new_x=[x[0],x[-1]]
   new_y=[y[0],y[-1]]
   plt.plot(new_x,[0,0],color='grey',linewidth=5)
   plt.plot(new_x,new_y,"o",color='grey',mew=10,ms=20)
   plt.plot(new_x,new_y,"o",color='white',mew=10,ms=10)

Буду очень признателен за помощь.

Заранее спасибо.

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете нарисовать дугу окружности между двумя точками, используя следующее:

#!/usr/bin/env python

import numpy as np
import matplotlib.pyplot as plt

from matplotlib import patches

# set the points
x1, y1 = (0., 0.)
x2, y2 = (1., 0.)

# calculate the arc
mxmy = mx, my = [(x1 + x2) / 2, (y1 + y2) / 2]
r = np.sqrt((x1 - mx)**2 + (y1 - my)**2)
width = 2 * r
height = 2 * r
start_angle = np.arctan2(y1 - my, x1 - mx) * 180 / np.pi
end_angle = np.arctan2(my - y2, mx - x2) * 180 / np.pi

# draw
arc = patches.Arc(mxmy, width, height, start_angle, end_angle)

fig, ax = plt.subplots(1,1)
ax.add_patch(arc)
ax.set_xlim(-0.1, 1.1) # you need to set the appropriate limits explicitly!
ax.set_ylim(-0.1, 1.1)
plt.show()

Бесстыдная заглушка:

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

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