Plotly Express:您可以在 px.choropleth 中手动定义图例吗?
Plotly Express: Can you manually define legend in px.choropleth?
我正在 plotly.express
中制作一个 px.choropleth()
图表。
这是代码片段;
import psycopg2
import pandas as pd
import plotly.express as px
''' PostgreSQL Variables '''
# your postgres login variables
''' PostgreSQL Connection '''
# your postgres connection code
''' SQL Query '''
# your SQL Query
''' Load SQL Queries into Pandas DataFrame '''
African = pd.DataFrame(SQL_Query_Code,
columns=['list-of-all-columns'])
''' Variable for Personal Colours '''
# e.g. HTML/HEx code : '#4c5c73'
# List all of the shades/tints codes; in this example I am using the tints codes
my_color_scale = [[0.0, '#4c5c73'], [0.1, '#5D6C81'], [0.2, '#6F7C8F'], [0.3, '#818C9D'], [0.4, '#939DAB'],
[0.5, '#A5ADB9'], [0.6, '#B7BDC7'], [0.7, '#C9CED5'], [0.8, '#DBDEE3'], [0.9, '#EDEEF1'],
[1.0, '#FFFFFF']]
''' Plotly graph '''
# Government Respond - School Closing
african_figure1 = px.choropleth(African,
locations='countrycode',
color='c1_school_closing',
color_continuous_scale=my_color_scale,
range_color=[0, 3],
hover_data={'c1_school_closing': False,
'countrycode': False,
'countryname': False},
hover_name='countryname',
labels={'c1_school_closing': 'SCALE'})
african_figure1.update_layout(geo_scope='africa',
coloraxis_reversescale=True, # To reverse the order of color shades/tints
title_text='Government Respond - SCHOOL CLOSING <br> '
'Source: <a href="https://www.bsg.ox.ac.uk/research/research-projects'
'/coronavirus-government-response-tracker#data"> Oxford University '
'CORONAVIRUS '
'Government Respond Tracker</a>')
# african_figure1.show()
# african_figure1.write_html('file/path/file_name.html')
此代码将创建一个具有自定义 CSS 颜色的非洲地图,突出显示按以下顺序比例关闭的学校数量;
- 0 'no measures',
- 1 'recommend closing',
- 2 'require closing (only some levels)',
- 3 'require closing all levels', and
- blank 'no data'.
但是,当 plotly.express
绘制这张地图时; 'blank data'
将自动省略。只留下没有旁边文字的余数,只留下降序排列的数字;即
- 3,
- 2,
- 1, and
- 0.
我的问题是;
是否可以手动重命名由 px.choropleth
?
自动创建的图例
所以,不仅仅是数字;我想在数字旁边有文本定义。
例如'3 - require closing all levels'
提前谢谢你。
为方便起见,下面提供了当前状态下的视觉帮助:
我举个例子。您可以在更新布局中使用 coloraxis_colorbar
词典。
这里,
tickvals
- 颜色栏中的枚举值
ticktext
- 根据值
显示的文本
from urllib.request import urlopen
import json
with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
counties = json.load(response)
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
dtype={"fips": str})
import plotly.express as px
fig = px.choropleth(df, geojson=counties, locations='fips', color='unemp',
color_continuous_scale="Viridis",
range_color=(0, 12),
scope="usa"
)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0},coloraxis_colorbar=dict(
title="unemployment rate",
thicknessmode="pixels",
lenmode="pixels",
yanchor="top",y=1,
ticks="outside",
tickvals=[0,4,8,12],
ticktext=["Low", "Low Medium", "High Medium", "High"],
dtick=4
))
fig.show()
现在来解决你的问题,
使用tickvals=[0,1,2,3]
和
ticktext=['0 - no measures', '1 - recommend closing', '2 - require closing (only some levels)', '3 - require closing all levels']
我正在 plotly.express
中制作一个 px.choropleth()
图表。
这是代码片段;
import psycopg2
import pandas as pd
import plotly.express as px
''' PostgreSQL Variables '''
# your postgres login variables
''' PostgreSQL Connection '''
# your postgres connection code
''' SQL Query '''
# your SQL Query
''' Load SQL Queries into Pandas DataFrame '''
African = pd.DataFrame(SQL_Query_Code,
columns=['list-of-all-columns'])
''' Variable for Personal Colours '''
# e.g. HTML/HEx code : '#4c5c73'
# List all of the shades/tints codes; in this example I am using the tints codes
my_color_scale = [[0.0, '#4c5c73'], [0.1, '#5D6C81'], [0.2, '#6F7C8F'], [0.3, '#818C9D'], [0.4, '#939DAB'],
[0.5, '#A5ADB9'], [0.6, '#B7BDC7'], [0.7, '#C9CED5'], [0.8, '#DBDEE3'], [0.9, '#EDEEF1'],
[1.0, '#FFFFFF']]
''' Plotly graph '''
# Government Respond - School Closing
african_figure1 = px.choropleth(African,
locations='countrycode',
color='c1_school_closing',
color_continuous_scale=my_color_scale,
range_color=[0, 3],
hover_data={'c1_school_closing': False,
'countrycode': False,
'countryname': False},
hover_name='countryname',
labels={'c1_school_closing': 'SCALE'})
african_figure1.update_layout(geo_scope='africa',
coloraxis_reversescale=True, # To reverse the order of color shades/tints
title_text='Government Respond - SCHOOL CLOSING <br> '
'Source: <a href="https://www.bsg.ox.ac.uk/research/research-projects'
'/coronavirus-government-response-tracker#data"> Oxford University '
'CORONAVIRUS '
'Government Respond Tracker</a>')
# african_figure1.show()
# african_figure1.write_html('file/path/file_name.html')
此代码将创建一个具有自定义 CSS 颜色的非洲地图,突出显示按以下顺序比例关闭的学校数量;
- 0 'no measures',
- 1 'recommend closing',
- 2 'require closing (only some levels)',
- 3 'require closing all levels', and
- blank 'no data'.
但是,当 plotly.express
绘制这张地图时; 'blank data'
将自动省略。只留下没有旁边文字的余数,只留下降序排列的数字;即
- 3,
- 2,
- 1, and
- 0.
我的问题是;
是否可以手动重命名由 px.choropleth
?
所以,不仅仅是数字;我想在数字旁边有文本定义。
例如'3 - require closing all levels'
提前谢谢你。
为方便起见,下面提供了当前状态下的视觉帮助:
我举个例子。您可以在更新布局中使用 coloraxis_colorbar
词典。
这里,
tickvals
- 颜色栏中的枚举值
ticktext
- 根据值
from urllib.request import urlopen
import json
with urlopen('https://raw.githubusercontent.com/plotly/datasets/master/geojson-counties-fips.json') as response:
counties = json.load(response)
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/fips-unemp-16.csv",
dtype={"fips": str})
import plotly.express as px
fig = px.choropleth(df, geojson=counties, locations='fips', color='unemp',
color_continuous_scale="Viridis",
range_color=(0, 12),
scope="usa"
)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0},coloraxis_colorbar=dict(
title="unemployment rate",
thicknessmode="pixels",
lenmode="pixels",
yanchor="top",y=1,
ticks="outside",
tickvals=[0,4,8,12],
ticktext=["Low", "Low Medium", "High Medium", "High"],
dtick=4
))
fig.show()
现在来解决你的问题,
使用tickvals=[0,1,2,3]
和
ticktext=['0 - no measures', '1 - recommend closing', '2 - require closing (only some levels)', '3 - require closing all levels']