Tên của cốt truyện này có các hàng với hai dấu chấm được kết nối là gì?


19

Tôi đã đọc báo cáo ĐTM và âm mưu này đã thu hút sự chú ý của tôi. Bây giờ tôi muốn có thể tạo ra cùng một loại cốt truyện.

nhập mô tả hình ảnh ở đây

Nó cho thấy sự phát triển năng suất năng lượng giữa hai năm (1990-2015) và thêm giá trị thay đổi giữa hai thời kỳ này.

Tên của loại cốt truyện này là gì? Làm cách nào tôi có thể tạo cùng một cốt truyện (với các quốc gia khác nhau) trong excel?


Đây có phải là nguồn pdf không? Tôi không thấy con số đó trong đó.
gung - Tái lập Monica

1
Tôi thường gọi đây là một dấu chấm.
StatsStudent

Một tên khác là âm mưu kẹo mút , đặc biệt khi các quan sát đã ghép dữ liệu được xem xét.
adin

1
Trông giống như một âm mưu quả tạ.
dùng2974951

Câu trả lời:


25

Câu trả lời của @gung là chính xác trong việc xác định loại biểu đồ và cung cấp liên kết về cách triển khai trong Excel, theo yêu cầu của OP. Nhưng đối với những người khác muốn biết cách thực hiện điều này trong R / tidyverse / ggplot, bên dưới là mã hoàn chỉnh:

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

Đồ thị như được thực hiện trong ggplot

Điều này có thể được mở rộng để thêm nhãn giá trị và để làm nổi bật màu của trường hợp trong đó thứ tự trao đổi giá trị, như trong bản gốc.


30

Đó là một âm mưu chấm. Đôi khi nó được gọi là "âm mưu chấm bi" bởi vì có một biến thể của biểu đồ được tạo ra bằng các dấu chấm mà đôi khi người ta cũng gọi là một dấu chấm. Phiên bản đặc biệt này vẽ hai dấu chấm cho mỗi quốc gia (trong hai năm) và vẽ một đường kẻ dày hơn giữa chúng. Các quốc gia được sắp xếp theo giá trị sau. Tài liệu tham khảo chính sẽ là cuốn sách Trực quan hóa dữ liệu của Cleveland . Googling dẫn tôi đến hướng dẫn Excel này .


Tôi đã cạo dữ liệu, trong trường hợp bất cứ ai muốn chơi với họ.

                       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, "scrape" có nghĩa là ước tính các giá trị mà các dấu chấm trong biểu đồ thể hiện. FWIW, tôi đã sử dụng Web Plot Digit .
gung - Phục hồi Monica

1
Hoặc là. tầm thường, biểu đồ dấu chấm. Tiền chất có vẻ mỏng trên mặt đất nhưng có tồn tại. Xem ví dụ Snedecor, GW 1937. Phương pháp thống kê áp dụng cho các thí nghiệm trong nông nghiệp và sinh học . Ames, IA: Báo chí đại học. Biểu đồ này đã bị loại bỏ tại một số điểm sau đó trong bản sửa đổi của văn bản nổi tiếng này; nó không xuất hiện trong các phiên bản với đồng tác giả WG Cochran,
Nick Cox

22

Một số người gọi nó là một âm mưu kẹo mút (ngang) với hai nhóm.

Dưới đây là cách tạo cốt truyện này trong Python bằng cách sử dụng matplotlibseaborn(chỉ được sử dụng cho kiểu), được điều chỉnh từ https://python-graph-gallery.com/184-leets-plot-with-2-groups/ và theo yêu cầu của OP trong các ý kiến.

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

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.