Есть ли способ создать график диапазона в python с помощью plotly? - PullRequest
1 голос
/ 02 августа 2020

Мне удалось создать простой точечный график, но мне нужен способ соединить эти точки. введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Я немного отредактировал код @ r-beginners , чтобы добавить градиент цвета к строке, аннотациям и их цвету. Что касается цветового градиента, как показано здесь :

Эта функция еще не доступна для линейных 2D-графиков, в настоящее время она доступна только для линейных 3D-графиков, см. https://github.com/plotly/plotly.js/issues/581. Однако можно использовать шкалу цветов на 2D-графике, если вы используете маркеры вместо линий, см. Пример ниже.

Вот мой код:

import pandas as pd
import numpy as np
import plotly.graph_objects as go

df = pd.DataFrame({'Grade': ["Doctorate Degree",
                             "Master's Degree",
                             "Bachelor's Degree",
                             "Associate Degree",
                             "Some college, no degree",
                             "Hight School",
                             "9th 12th(no degree)",
                             "Less Than 9th Grade"],
                   'Women': [91, 69, 54, 38, 35, 29, 22, 21],
                   'Men': [151, 99, 84, 56, 53, 47, 37, 34]})

w_lbl = list(map(lambda x: str(x), df['Women']))
m_lbl = list(map(lambda x: str(x), df['Men']))

fig = go.Figure()

for i in range(0, len(df)):

    fig.add_trace(go.Scatter(x = np.linspace(df['Women'][i], df['Men'][i], 1000),
                             y = 1000*[df['Grade'][i]],
                             mode = 'markers',
                             marker = {'color': np.linspace(df['Women'][i], df['Men'][i], 1000),
                                       'colorscale': ['#E1A980', '#8DAEA6'],
                                       'size': 8}))

fig.add_trace(go.Scatter(x = df['Women'],
                         y = df['Grade'],
                         marker = dict(color = '#CC5600', size = 14),
                         mode = 'markers+text',
                         text = w_lbl,
                         textposition = 'middle left',
                         textfont = {'color': '#CC5600'},
                         name = 'Woman'))

fig.add_trace(go.Scatter(x = df['Men'],
                         y = df['Grade'],
                         marker = dict(color = '#237266', size = 14),
                         mode = 'markers+text',
                         text = m_lbl,
                         textposition = 'middle right',
                         textfont = {'color': '#237266'},
                         name = 'Men'))

fig.add_annotation(x = df.iloc[-1, df.columns.get_loc('Women')] - 5,
                   y = df.iloc[-1, df.columns.get_loc('Grade')],
                   text = 'Women',
                   font = {'color': '#CC5600',
                           'size': 15},
                   showarrow = False)

fig.add_annotation(x = df.iloc[-1, df.columns.get_loc('Men')] + 5,
                   y = df.iloc[-1, df.columns.get_loc('Grade')],
                   text = 'Men',
                   font = {'color': '#237266',
                           'size': 15},
                   showarrow = False)

fig.update_layout(title = "Sample plotly",
                  showlegend = False)

fig.show()

Plot:

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

1 голос
/ 02 августа 2020

Графики «Plotly» находятся на уровне новичка, я ими мало пользовался. Две функции, которые мне не удалось реализовать, - это цветовые градиенты линейного графика и метки «Женщины» и «Мужчины». Это не очень хорошо на этом уровне, но используйте его в качестве справки.

import pandas as pd
import numpy as np
import io

data = '''
 Grade Women Men
0 "Less Than 9th Grade" 21 34
1 "9th 12th(no degree)" 22 37
2 "Hight School" 29 47
3 "Some college, no degree" 35 53
4 "Associate Degree" 38 56
5 "Bachelor's Degree" 54 84
6 "Master's Degree" 69 99
7 "Doctorate Degree" 91 151
'''

df = pd.read_csv(io.StringIO(data), sep='\s+')
df.sort_values('Men', ascending=False, inplace=True, ignore_index=True)

import plotly.graph_objects as go
import plotly.figure_factory as ff

w_lbl = [str(s) for s in df['Women'].tolist()]
m_lbl = [str(s) for s in df['Men'].tolist()]

fig = go.Figure()

for i in range(0,8):
    fig.add_trace(go.Scatter(
        x=[df['Women'][i],df['Men'][i]],
        y=[df['Grade'][i],df['Grade'][i]],
        orientation='h',
        line=dict(color='rgb(244,165,130)', width=8),
             ))

fig.add_trace(go.Scatter(
    x=df['Women'],
    y=df['Grade'],
    marker=dict(color='#CC5700', size=14),
    mode='markers+text',
    text=w_lbl,
    textposition='middle left',
    name='Woman'))

fig.add_trace(go.Scatter(
    x=df['Men'],
    y=df['Grade'],
    marker=dict(color='#227266', size=14),
    mode='markers+text',
    text=m_lbl,
    textposition='middle right',
    name='Men'))

fig.update_layout(title="Sample plotly", showlegend=False)


fig.show()

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

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