Plotly: Категориальное форматирование диаграммы рассеяния

#python #plotly #scatter-plot

#python #plotly #точечная диаграмма

Вопрос:

У меня проблема с правильным форматированием диаграммы рассеяния с использованием pandas и plotly. Я хотел бы добиться чего-то похожего на приведенный ниже график (созданный с помощью Google Sheets).

введите описание изображения здесь

Используя точно такие же данные, используя Google colab pandas и plotly, у меня есть совершенно другая визуализация, где все точки помещаются в сетку, что очень затрудняет визуализацию выбросов.

введите описание изображения здесь

Как я могу добиться результата, аналогичного графику из Google Sheets, используя python? Предпочтительно интерактивный в plotly.

 import numpy as np
import pandas as pd
import hvplot.pandas
import plotly.express as px
import matplotlib.pyplot as plt

worksheet= spreadsheet.worksheet('left_to_right') ;

# get_all_values gives a list of rows.
rows = worksheet.get_all_values()
df = pd.DataFrame(rows)
headers = df.iloc[0]

cols = list(df.columns) 

pd.options.plotting.backend = "plotly" 
df.plot(
    kind='scatter',
    x=cols[0], 
    y=cols[1:], 
    width=1500,  
    height=1000 
)
 

Ссылка на набор данных:
https://docs.google.com/spreadsheets/d/1NOHH9dUEAhRjrl0NWq_zUIgzUdYfupJjuEaXyRmTFEY/edit?usp=sharing

Ответ №1:

Вы могли бы создать полосовую диаграмму с помощью Plotly Express, пример см. В приведенном ниже коде.

 import pandas as pd
import plotly.express as px

# load the data
df = pd.read_csv('Data.csv', header=None)

# prepare the data
df = df.melt(id_vars=df.columns[0])
df = df.drop(labels=['variable'], axis=1)
df.columns = ['variable', 'value']
df = df.sort_values(by='variable')
df = df.reset_index(drop=True)
df
#        variable     value
# 0     Amygdala   1.066667
# 1     Amygdala   1.057650
# 2     Amygdala   1.117117
# 3     Amygdala   1.007353
# 4     Amygdala   0.979522
#          ...       ...
# 1075  Thalamus   1.019973
# 1076  Thalamus   1.001422
# 1077  Thalamus   1.037945
# 1078  Thalamus   0.963793
# 1079  Thalamus   1.012915

# plot the data
fig = px.strip(df, x='variable', y='value', color='value', stripmode='overlay')

fig.update_layout(plot_bgcolor='white',
                  paper_bgcolor='white',
                  showlegend=False,
                  xaxis=dict(title=None, linecolor='gray', mirror=True),
                  yaxis=dict(title=None, linecolor='gray', mirror=True))

fig.show()
 

введите описание изображения здесь

Комментарии:

1. Как правило, это почти работает, я просто вижу, что на вашей оси Y у нас есть значения, такие как 1 … 1.1 и т. Д., У меня это 1.0025, 1.0151… итак, точные данные некоторых точек вместо равномерных интервалов, как это исправить? ссылка на график также дополнительно сортируется как df = df.sort_values([‘value’, ‘variable’],по возрастанию = False) кроме этого, в вашем коде обычно нет изменений photos.google.com/search/_tra_/photo /…