พล็อตนี้มีชื่ออะไรที่มีแถวที่มีจุดเชื่อมต่อสองจุด


19

ฉันอ่านรายงาน EIA และโครงเรื่องนี้ได้รับความสนใจ ตอนนี้ฉันต้องการที่จะสร้างพล็อตประเภทเดียวกัน

ป้อนคำอธิบายรูปภาพที่นี่

มันแสดงให้เห็นถึงวิวัฒนาการการผลิตพลังงานระหว่างสองปี (2533-2558) และเพิ่มมูลค่าการเปลี่ยนแปลงระหว่างสองช่วงเวลานี้

พล็อตประเภทนี้ชื่ออะไร ฉันจะสร้างพล็อตเดียวกัน (กับประเทศต่าง ๆ ) ใน excel ได้อย่างไร


นี่เป็นแหล่งPDFหรือไม่ ฉันไม่เห็นรูปนั้น
gung - Reinstate Monica

1
ฉันมักจะเรียกจุดนี้ว่าพล็อต
StatsStudent

อีกชื่อหนึ่งคือพล็อตอมยิ้มโดยเฉพาะอย่างยิ่งเมื่อการสังเกตได้จับคู่ข้อมูลที่ถูกมอง
adin

1
ดูเหมือนว่าพล็อตดัมเบล
user2974951

คำตอบ:


25

คำตอบโดย @gung นั้นถูกต้องในการระบุประเภทแผนภูมิและจัดเตรียมลิงก์ไปยังวิธีการนำไปใช้ใน Excel ตามที่ OP ร้องขอ แต่สำหรับคนอื่น ๆ ที่ต้องการทราบวิธีการทำเช่นนี้ใน R / tidyverse / ggplot ด้านล่างนี้เป็นรหัสที่สมบูรณ์:

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

สิ่งนี้สามารถขยายเพื่อเพิ่มป้ายกำกับค่าและเพื่อเน้นสีของกรณีหนึ่งซึ่งค่าการแลกเปลี่ยนสั่งเช่นเดียวกับในต้นฉบับ


30

นั่นคือพล็อตจุด บางครั้งเรียกว่า "Cleveland dot plot" เพราะมีฮิสโตแกรมที่มีจุดแตกต่างกันซึ่งบางครั้งผู้คนก็เรียกพล็อตจุดเช่นกัน รุ่นนี้ลงจุดสองจุดต่อประเทศ (สำหรับสองปี) และวาดเส้นหนาระหว่างพวกเขา ประเทศเรียงตามค่าหลัง อ้างอิงหลักจะเป็นหนังสือของคลีฟแลนด์แสดงผลข้อมูล Googling นำฉันไปสู่การกวดวิชา Excelนี้


ฉันคัดลอกข้อมูลในกรณีที่ทุกคนต้องการเล่นกับพวกเขา

                       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" หมายถึงประมาณค่าที่จุดในพล็อตแสดง FWIW ผมใช้เว็บแปลง Digitizer
gung - Reinstate Monica

1
หรือ. แผนภูมิจุด สารตั้งต้นดูบางลงบนพื้น แต่มีอยู่จริง ดูเช่น Snedecor, GW 1937 วิธีการทางสถิติประยุกต์เพื่อการทดลองในการเกษตรและชีววิทยา อาเมสไอโอวา: วิทยาลัยกด กราฟนี้ลดลงในภายหลังในการแก้ไขข้อความที่รู้จักกันดีนี้ ไม่ปรากฏในรุ่นที่มีผู้เขียนร่วม WG Cochran
นิคค็อกซ์

22

บางคนเรียกมันว่าพล็อตอมยิ้ม (แนวนอน) ที่มีสองกลุ่ม

นี่คือวิธีการทำพล็อตนี้ใน Python โดยใช้matplotlibและseaborn(ใช้สำหรับสไตล์เท่านั้น), ดัดแปลงจากhttps://python-graph-gallery.com/184-lollipop-plot-with-2-groups/และตามที่ร้องขอโดย OP ในความคิดเห็น

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

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.