Как построить два списка кортежей в Pandas с помощью matplotlib? - PullRequest
0 голосов
/ 18 июня 2020

Здравствуйте, у меня есть фрейм данных под названием temp, когда я делаю temp["diameter_tuple"].unique(), я получаю следующую таблицу.
Эта таблица фактически представляет диапазоны скоростей двигателя слева и диаметры стержня, изготовленного с использованием эти диапазоны скоростей справа. Я хочу построить график, который отображает диапазоны скоростей (слева) по оси X и соответствующие диаметры стержня, произведенного для этого диапазона скорости, по оси Y. Примечание. Существуют также некоторые диапазоны скоростей, для которых существует более одного диапазона диаметров, например, здесь:

(45, 45.5) [(-2.65, 6.35), (0.625, 0.75)]

, то есть для диапазона скорости (45, 45.5) диапазон диаметров из (-2.65, 6.35) и (0.625, 0.75).

speed_range_tuple   

    (20.5, 21.0)                                   [(0.55, 0.75)]
    (23.5, 24.0)                                  [(0.65, 0.715)]
    (24, 24.5)                                    [(0.645, 0.75)]
    (25, 25.5)                                     [(0.795, 0.9)]
    (25.5, 26.0)                                     [(0.5, 0.8)]
    (26.5, 27.0)                                  [(0.745, 0.85)]
    (28, 28.5)                                    [(0.645, 0.75)]
    (30, 30.5)                                    [(-2.75, 6.25)]
    (30.5, 31.0)                                    [(0.7, 0.78)]
    (31.5, 32.0)                                   [(0.65, 0.73)]
    (35, 35.5)                                    [(-0.25, 8.75)]
    (35.5, 36.0)                         [(0.5, 0.8), (0.2, 9.2)]
    (45, 45.5)                     [(-2.65, 6.35), (0.625, 0.75)]
    (47, 47.5)                                    [(-1.65, 7.35)]
    (47.5, 48.0)                                  [(0.65, 0.775)]
    (50, 50.5)      [(-7.15, 1.85), (0.725, 0.85), (0.625, 0.75)]
    Name: diameter_tuple, dtype: object

Итак, я хочу построить приведенную выше таблицу примерно так (надеюсь, это поможет в понимании)

enter image description here

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Двумерный график рассеяния не сможет интуитивно описать диапазоны. Я бы предложил построить линию от (min_speed, min_dim) до (max_speed, max_dim). Это может сделать что-то вроде следующего. Нижний подсюжет - это просто крупный план верхнего.

from matplotlib import pyplot as plt

s = temp["diameter_tuple"].unique()

fig, ax = plt.subplots(nrows=2, sharex=True, figsize=(10,10))
for i in range(len(s)):
    for j in range(len(s[i])):
        ax[0].plot(s.index[i], s[i][j])
        ax[1].plot(s.index[i], s[i][j])
ax[1].set_xlabel("Speed")
ax[0].set_ylabel("Diameter")
ax[1].set_ylabel("Diameter")
ax[1].set_ylim([0.2,1])

enter image description here

1 голос
/ 18 июня 2020

Один из способов построения данных:

df = temp["diameter_tuple"].unique().reset_index()
df = df.explode('diameter_tuple').sort_values(by='speed_range_tuple')
df[['speed_range_tuple', 'diameter_tuple']].astype(str).plot.scatter(
    'speed_range_tuple', 'diameter_tuple', s=50)
plt.show()

Пример вывода:

enter image description here

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