İki bağlantılı nokta içeren satırları olan bu arsanın adı nedir?


19

ÇED raporunu okudum ve bu konu dikkatimi çekti. Şimdi aynı tür bir komplo oluşturabilmek istiyorum.

resim açıklamasını buraya girin

İki yıl (1990-2015) arasındaki enerji verimliliği gelişimini gösterir ve bu iki dönem arasındaki değişim değerini ekler.

Bu tip arsanın adı nedir? Excel'de aynı grafiği (farklı ülkelerle) nasıl oluşturabilirim?


bu pdf kaynağı? İçinde o rakamı görmüyorum.
gung - Monica'yı eski durumuna döndürün

1
Ben buna genellikle nokta arsası diyorum.
İstatistikler

Başka bir isim , özellikle gözlemler eşleştirilen verilere bakıldığında lolipop grafiğidir .
adin

1
Dumbbell arsasına benziyor.
user2974951

Yanıtlar:


25

@Gung tarafından verilen cevap, grafik türünü tanımlamak ve OP tarafından talep edildiği gibi Excel'de nasıl uygulanacağına ilişkin bir bağlantı sağlamak için doğrudur. Ancak bunu R / tidyverse / ggplot içinde nasıl yapacağını bilmek isteyen diğerleri için, aşağıdaki tam kod:

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')

Ggplot içinde uygulandığı gibi grafik

Bu değer etiketleri eklemek ve değerlerin takasın orijinal olduğu gibi değiştiği bir vakanın rengini vurgulamak için genişletilebilir.


30

Bu bir nokta konusu. Bazen "Cleveland nokta grafiği" olarak adlandırılır, çünkü insanların bazen nokta grafiği olarak adlandırdığı noktalarla yapılmış bir histogram çeşidi vardır. Bu özel sürüm, ülke başına iki nokta çizer (iki yıl boyunca) ve aralarında daha kalın bir çizgi çizer. Ülkeler ikinci değere göre sıralanır. Birincil referans Cleveland'ın Veri Görselleştirme kitabı olacaktır . Google ile çalışmak beni bu Excel eğitimine yönlendiriyor .


Herhangi birinin onlarla oynamak istemesi durumunda verileri kazdım.

                       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, "kazıma", grafikteki noktaların temsil ettiği değerleri tahmin etmek anlamına gelir. FWIW, Web Plot Sayısallaştırıcı kullandım .
gung - Monica'yı eski durumuna döndürün

1
Veya. önemsiz, nokta grafik. Öncüler yerde zayıf görünüyor ama var. Bkz. Örneğin Snedecor, GW 1937. Tarım ve Biyolojide Deneylere Uygulanan İstatistiksel Yöntemler . Ames, IA: Collegiate Press. Bu grafik, bu iyi bilinen metnin gözden geçirilmesinde daha sonraki bir noktada bırakılmıştır; ortak yazar WG Cochran,
Nick Cox

22

Bazıları buna iki gruplu (yatay) bir lolipop grafiği diyorlar .

İşte kullanarak Python bu arsa nasıl olduğunu matplotlibve seaborn(sadece stil için kullanılır), uyarlanan https://python-graph-gallery.com/184-lollipop-plot-with-2-groups/ ve talep ettiği OP yorumlarda.

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()

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.