Comment faire une telle image en python?

Appelez - moi frère. 2022-01-15 03:56:09 阅读数:746

comment faire une telle image

Bonjour tout le monde,C'est moi..

J'ai vu une photo récemment.,C'est cool.,J'ai cherché ce qu'on appelle un diagramme à cordes..J'en vois beaucoup.RCas de dessin linguistique,Et ouiExcelPour les grands.VBAEt en dessine un,Pas trop fort.

Alors,PythonTu peux dessiner??J'a I fait un tour et j'ai découvert qu'il y avait un paquet de tiers payant qui pouvait être mis en œuvre.,Parce qu'il faut payer.,Pas ici..Final,Je l'ai trouvé.PythonProgrammes gratuits dessinés,Aujourd'hui, regardons ensemble!

1. Qu'est - ce qu'un diagramme à cordes

Voici un diagramme à cordes.,Utilisé principalement pour montrer les relations entre plusieurs objets,Les segments de ligne reliés entre deux points d'un cercle sont appelés cordes.

Source::Réseau

Pour les diagrammes à cordes,Il présente les caractéristiques suivantes::

  • Distinguer les objets de différentes couleurs(Point)
  • Il y a une relation entre les représentations d'accord entre deux points sur un cercle
  • La largeur de l'Accord représente le degré de relation,Plus la relation est évidente, plus la largeur de l'accord est large.
  • Parce que différents objets ont des couleurs différentes,Les objets peuvent être distingués par la couleur de l'accord entre deux points->Orientation de l'objet

En général,Les diagrammes d'accord peuvent être utilisés dans les scénarios suivants::

  • Mouvements de population(Migration entre différentes villes)
  • Commerce de joueurs entre équipes ou équipes de compétition électronique
  • Relation entre les différents produits finis avec des composants qui se chevauchent et les composants
  • Comme dans les scénarios d'accumulation ci - dessus, etc.

Aujourd'hui, La Bibliothèque de visualisation dont nous avons besoin pour dessiner les accords est holoviews

2. Dessin d'accord

HoloViewsEst une source ouvertePythonBibliothèque, L'analyse et la visualisation des données peuvent être réalisées en très peu de lignes de code ,Sauf par défautmatplotlib À l'arrière ,Un autre a été ajoutéBokehArrière - plan.Bokeh Offre une plateforme puissante ,En combinantBokeh Widgets interactifs disponibles ,Peut être utiliséHTML5 canvasEtWebGL Génération rapide d'interactivité et de visualisation de haute dimension , Idéal pour l'exploration interactive des données .
Site officiel:http://holoviews.org/

Tout d'abord,, Nous devons installer des bibliothèques tierces holoviews

pip install holoviews

Regardons d'abord le cas officiel

import holoviews as hv
from holoviews import opts, dim
from bokeh.sampledata.airport_routes import routes, airports
# SélectionnerbokehMoteur
hv.extension('bokeh')
# Count the routes between Airports
route_counts = routes.groupby(['SourceID', 'DestinationID']).Stops.count().reset_index()
nodes = hv.Dataset(airports, 'AirportID','City')
chord = hv.Chord((route_counts, nodes), ['SourceID', 'DestinationID'], ['Stops'])
# Select the 6 busiest airports
busiest = list(routes.groupby('SourceID').count().sort_values('Stops').iloc[-6:].index.values)
busiest_airports = chord.select(AirportID=busiest, selection_mode='nodes')
busiest_airports.opts(
opts.Chord(cmap='Category20', edge_color=dim('SourceID').str(),
height=500,
labels='City',
node_color=dim('AirportID').str(), width=500))

Diagramme à cordes

Nous prenons le montant payé par le joueur dans les différents jeux pour dessiner le diagramme à cordes , Montrer chaque étape

2.1 Préparation des données

Démonstration de cas à l'aide des données suivantes

import pandas as pd
df = pd.read_clipboard()
df
Nom Le roi Dawn Manger du poulet Protoss Pelle en or Zajinhua
Xiao Ming 20 0 15 10 12 17
Mon frère. 11 1 8 0 11 5
Xiaohua. 10 9 14 2 8 4
Xiao Qing 18 4 12 3 6 8
Petit jour. 17 9 13 4 12 6

Nous devons changer la table large en table étroite ( Si vous êtes une montre étroite , Cette opération n'est pas nécessaire )

data = df.melt(id_vars=['Nom'],
value_vars=['Le roi', 'Dawn', 'Manger du poulet', 'Protoss', 'Pelle en or', ' Zajinhua ']
)
data.head()
Nom variable value
0 Xiao Ming Le roi 20
1 Mon frère. Le roi 11
2 Xiaohua. Le roi 10
3 Xiao Qing Le roi 18
4 Petit jour. Le roi 17

Les données pour dessiner les cordes sont déjà disponibles :

  • String OrientationC'estNom->variable
  • La largeur de la corde est value

Et puis...,On s'en occupe. Objet sur le cercle (Point)

node = pd.DataFrame(data['Nom'].append(data['variable']).unique(),
columns=['Noeud']
)
node
Noeud
0 Xiao Ming
1 Mon frère.
2 Xiaohua.
3 Xiao Qing
4 Petit jour.
5 Le roi
6 Dawn
7 Manger du poulet
8 Protoss
9 Pelle en or
10 Zajinhua

Final, Les données du noeud objet sont les suivantes :

nodes = hv.Dataset(node, 'Noeud',)

Finis ça., On va pouvoir dessiner

2.2 Opération de dessin

chord = hv.Chord((route_counts, nodes),
['Nom', 'variable'], ['value'])
# Nombre de noeuds sélectionnables 
busiest = node['Noeud'].to_list()
busiest_airports = chord.select(AirportID=busiest, selection_mode='nodes')
busiest_airports.opts(
opts.Chord(cmap='Tab20', edge_color=dim('Nom').str(),
height=500,
width=500,
labels='Noeud',
node_color='Noeud',
edge_visible=True
))

Final, Nous obtenons les résultats suivants :

 Cas de diagramme à cordes

Cet accord est interactif ,C'est bon.saveLocalhtmlDocumentation.

hv.save(busiest_airports,r'output.html')

Enregistrer localement

En fait..., Il y a beaucoup d'autres paramètres pour le dessin d'accord ,Tout le monde peut se débrouiller seul.helpEssaie.( Comme la couleur de fond 、Taille de la police、 La couleur des cordes cmapAttendez un peu!)

C'est tout ce qui précède, Je crois que tout le monde peut aussi faire des diagrammes à cordes cool !

Allez~

版权声明:本文为[Appelez - moi frère.]所创,转载请带上原文链接,感谢。 https://pythonmana.com/2022/01/202201080611484703.html