Quel est le nom de ce tracé qui a des lignes avec deux points connectés?


19

J'ai lu le rapport d'EIA et ce complot a attiré mon attention. Je veux maintenant pouvoir créer le même type de tracé.

entrez la description de l'image ici

Il montre l'évolution de la productivité énergétique entre deux ans (1990-2015) et ajoute la valeur de variation entre ces deux périodes.

Quel est le nom de ce type de terrain? Comment puis-je créer le même tracé (avec différents pays) dans Excel?


Ce pdf est- il la source? Je ne vois pas ce chiffre là-dedans.
gung - Rétablir Monica

1
J'appelle généralement cela un point dot.
StatsStudent

Un autre nom est lollipop plot , en particulier lorsque les observations ont apparié des données examinées.
adin

1
On dirait un complot d'haltères.
user2974951

Réponses:


25

La réponse de @gung est correcte pour identifier le type de graphique et fournir un lien vers la mise en œuvre dans Excel, comme demandé par le PO. Mais pour ceux qui veulent savoir comment faire cela dans R / tidyverse / ggplot, voici le code complet:

library(dplyr)   # for data manipulation
library(tidyr)   # for reshaping the data frame
library(stringr) # string manipulation
library(ggplot2) # graphing

# create the data frame 
# (in wide format, as needed for the line segments):
dat_wide = tibble::tribble(
  ~Country,   ~Y1990,   ~Y2015,
  'Russia',  71.5, 101.4,
  'Canada',  74.4, 102.9,
  'Other non-OECD Europe/Eurasia',  60.9, 135.2,
  'South Korea',   127, 136.2,
  'China',  58.5, 137.1,
  'Middle East', 170.9, 158.8,
  'United States', 106.8,   169,
  'Australia/New Zealand', 123.6, 170.9,
  'Brazil', 208.5, 199.8,
  'Japan',   181, 216.7,
  'Africa', 185.4,   222,
  'Other non-OECD Asia', 202.7,   236,
  'OECD Europe', 173.8, 239.9,
  'Other non-OECD Americas', 193.1, 242.3,
  'India', 173.8, 260.6,
  'Mexico/Chile', 221.1, 269.8
)

# a version reshaped to long format (for the points):
dat_long = dat_wide %>% 
  gather(key = 'Year', value = 'Energy_productivity', Y1990:Y2015) %>% 
  mutate(Year = str_replace(Year, 'Y', ''))

# create the graph:
ggplot() +
  geom_segment(data = dat_wide, 
               aes(x    = Y1990, 
                   xend = Y2015, 
                   y    = reorder(Country, Y2015), 
                   yend = reorder(Country, Y2015)),
               size = 3, colour = '#D0D0D0') +
  geom_point(data = dat_long,
             aes(x      = Energy_productivity, 
                 y      = Country, 
                 colour = Year),
             size = 4) +
  labs(title = 'Energy productivity in selected countries \nand regions',
       subtitle = 'Billion dollars GDP per quadrillion BTU',
       caption = 'Source: EIA, 2016',
       x = NULL, y = NULL) +
  scale_colour_manual(values = c('#1082CD', '#042B41')) +
  theme_bw() +
  theme(legend.position = c(0.92, 0.20),
        legend.title = element_blank(),
        legend.box.background = element_rect(colour = 'black'),
        panel.border = element_blank(),
        axis.ticks = element_line(colour = '#E6E6E6'))

ggsave('energy.png', width = 20, height = 10, units = 'cm')

Graphique tel qu'implémenté dans ggplot

Cela pourrait être étendu pour ajouter des étiquettes de valeur et pour mettre en évidence la couleur du seul cas où les valeurs s'échangent, comme dans l'original.


30

Voilà un point dot. Il est parfois appelé «tracé de points de Cleveland» car il existe une variante d'un histogramme fait de points que les gens appellent parfois aussi un tracé de points. Cette version particulière trace deux points par pays (pour les deux ans) et trace une ligne plus épaisse entre eux. Les pays sont triés selon cette dernière valeur. La référence principale serait le livre de Cleveland Visualizing Data . La recherche sur Google m'amène à ce didacticiel Excel .


J'ai gratté les données, au cas où quelqu'un voudrait jouer avec eux.

                       Country  1990  2015
                        Russia  71.5 101.4
                        Canada  74.4 102.9
 Other non-OECD Europe/Eurasia  60.9 135.2
                   South Korea 127.0 136.2
                         China  58.5 137.1
                   Middle East 170.9 158.8
                 United States 106.8 169.0
         Australia/New Zealand 123.6 170.9
                        Brazil 208.5 199.8
                         Japan 181.0 216.7
                        Africa 185.4 222.0
           Other non-OECD Asia 202.7 236.0
                   OECD Europe 173.8 239.9
       Other non-OECD Americas 193.1 242.3
                         India 173.8 260.6
                  Mexico/Chile 221.1 269.8

3
BTW, "gratter" signifie estimer les valeurs représentées par les points du tracé. FWIW, j'ai utilisé Web Plot Digitizer .
gung - Rétablir Monica

1
Ou. trivialement, tableau de points. Les précurseurs semblent minces au sol mais existent. Voir par exemple Snedecor, GW 1937. Méthodes statistiques appliquées aux expériences en agriculture et en biologie . Ames, IA: Collegiate Press. Ce graphique a été abandonné à un moment ultérieur de la révision de ce texte bien connu; il n'apparaît pas dans les éditions avec le co-auteur WG Cochran,
Nick Cox

22

Certains l'appellent un complot de sucettes (horizontal) avec deux groupes.

Voici comment faire ce tracé en Python en utilisant matplotlibet seaborn(uniquement utilisé pour le style), adapté de https://python-graph-gallery.com/184-lollipop-plot-with-2-groups/ et comme demandé par le OP dans les commentaires.

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid")  # set style

df = ...
df = df.set_index("Country").sort_values("2015")
df["change"] = df.apply(lambda df2: "{:+.0%}".format(df2["2015"] / df2["1990"] - 1), axis=1)
print(df)

#                                 1990   2015 change
# Country                                           
# Russia                          71.5  101.4   +42%
# Canada                          74.4  102.9   +38%
# Other non-OECD Europe/Eurasia   60.9  135.2  +122%
# South Korea                    127.0  136.2    +7%
# China                           58.5  137.1  +134%
# Middle East                    170.9  158.8    -7%
# United States                  106.8  169.0   +58%
# Australia/New Zealand          123.6  170.9   +38%
# Brazil                         208.5  199.8    -4%
# Japan                          181.0  216.7   +20%
# Africa                         185.4  222.0   +20%
# Other non-OECD Asia            202.7  236.0   +16%
# OECD Europe                    173.8  239.9   +38%
# Other non-OECD Americas        193.1  242.3   +25%
# India                          173.8  260.6   +50%
# Mexico/Chile                   221.1  269.8   +22%

plt.figure(figsize=(12,6))
y_range = range(1, len(df.index) + 1)
plt.hlines(y=y_range, xmin=df['1990'], xmax=df['2015'], color='grey', alpha=0.4, lw=3)
plt.scatter(df['1990'], y_range, color='blue', s=100, label='1990')
plt.scatter(df['2015'], y_range, color='black', s=100 , label='2015')
for (_, row), y in zip(df.iterrows(), y_range):
    plt.annotate(row["change"], (max(row["1990"], row["2015"]) + 2, y))
plt.legend(loc=2)

plt.yticks(y_range, df.index)
plt.title("Energy productivity in selected countries and regions, 1990 and 2015\nBillion dollars GDP per quadrillion BTU", loc='left')
plt.xlim(50, 300)
plt.gcf().subplots_adjust(left=0.35)
plt.tight_layout()
plt.show()

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.