3D-диаграмма рассеяния: многозначная диаграмма, раскраска по столбцу

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

      df = pd.DataFrame({"Date": ['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
           "A_x1": [1, 2, 2, 2],
           "A_x2": [9, 2, 2, 3],
           "A_x3": [1, 3, 2, 9],
           "B_x1": [1, 8, 2, 3],
           "B_x2": [3, 8, 9, 3],
           "B_x3": [2, 4, 5, 5],
           "C_x1": [2, 6, 5, 2],
           "C_x2": [4, 8, 1, 3],
           "C_x3": [6, 9, 5, 7]})

Как вы могли догадаться: 3 оси трехмерной диаграммы рассеяния должны быть x1, x2 и x3. Итак, у меня есть 3 переменных для 3-х осей, но несколько значений для каждой строки. Я хочу построить значения A_x1 / 2/3, B_x1 / 2/3 и т. Д. В соответствующей точке и раскрасить их (например, A = красный, B = зеленый, C = синий и т. Д.).

Я пытался использовать matplotlib и plotly, но я открыт для любых других библиотек. Чтобы получить фрейм данных или массив для всех значений x_1, я использую следующий код.

      df_x_1 = df.filter(like='1') #df x_1
x_1 = df_x_1.to_numpy() #arr_x_1

Это простейшая диаграмма рассеяния в plotly, отлично работает:

      import plotly.express as px
fig = px.scatter_3d(df, 
                    x='A_x1', 
                    y='A_x2', 
                    z='A_x3',
                    #color='species'
                    )
fig.show()

Часть проблемы, которую решил @Ynjxsjmh, испортила:

Но это обв. отображает значения x1, x2, x3 для A (= 3 столбца), я хочу, чтобы все столбцы>! были включены. Я хочу сделать что-то подобное, но получаю разные ошибки. Пробовал с>! Dataframe и массивами. код

      fig = px.scatter_3d(x=df.filter(like='1').values.ravel('F'),
                    y=df.filter(like='2').values.ravel('F'),
                    z=df.filter(like='3').values.ravel('F'),
                    color = ( df.filter(like='3').values.ravel('F')*df.filter(like='2').values.ravel('F')*df.filter(like='1').values.ravel('F') )**(1/3)

                    )
fig.show()

Этот код работает сейчас. Точки данных (например, A_x1,x2,x3 присутствуют в точках исправления). Какое покрытие пока непонятно: Окраска.

Теперь я раскрашиваю точки данных в соответствии с их геометрическим размером, выполняя color = (x_1 x_2 x_3) ^ (1/3)

Что я хочу: раскрасьте точки данных в соответствии с именем столбца или первой строкой фрейма данных или чем-то еще (мне придется добавить эту строку, но это не будет проблемой).

Любые идеи? Спасибо!

1 ответ

x, y а также zиз plotly.express.scatter_3d() должно быть Облы или INT или серия или массив типа . df.filter(like='1') возвращает фрейм данных.

Вы можете использовать numpy.ravel () для сглаживания значений в направлении столбца.

      fig = px.scatter_3d(x=df.filter(like='1').values.ravel('F'),
                    y=df.filter(like='2').values.ravel('F'),
                    z=df.filter(like='3').values.ravel('F'),
                    )
Другие вопросы по тегам