나는 EIA 보고서를 읽었으며이 줄거리는 나의 관심을 끌었다. 이제 동일한 유형의 플롯을 만들 수 있기를 원합니다.
그것은 2 년 (1990-2015) 사이의 에너지 생산성 진화를 보여주고이 두 기간 사이의 변화 가치를 더합니다.
이 유형의 줄거리의 이름은 무엇입니까? Excel에서 동일한 플롯을 다른 국가와 함께 만들려면 어떻게해야합니까?
나는 EIA 보고서를 읽었으며이 줄거리는 나의 관심을 끌었다. 이제 동일한 유형의 플롯을 만들 수 있기를 원합니다.
그것은 2 년 (1990-2015) 사이의 에너지 생산성 진화를 보여주고이 두 기간 사이의 변화 가치를 더합니다.
이 유형의 줄거리의 이름은 무엇입니까? Excel에서 동일한 플롯을 다른 국가와 함께 만들려면 어떻게해야합니까?
답변:
@gung의 답변은 차트 유형을 식별하고 OP의 요청에 따라 Excel에서 구현하는 방법에 대한 링크를 제공하는 데 정확합니다. 그러나 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')
이를 통해 가치 레이블을 추가하고 원본과 같이 값이 교체되는 사례의 색상을 강조 할 수 있습니다.
그것은 도트 플롯입니다. 사람들이 때때로 점 도표라고 부르는 점들로 구성된 히스토그램의 변형이 있기 때문에 때때로 "클리블랜드 점 도표"라고도합니다. 이 특정 버전은 국가 당 2 개의 점 (2 년 동안)을 표시하고 그 사이에 더 두꺼운 선을 그립니다. 국가는 후자의 가치에 따라 분류됩니다. 기본 참조는 Cleveland의 책 Visualizing Data 입니다. 인터넷 검색은 이 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
일부는 그것을 두 그룹으로 구성된 (수평) 롤리팝 플롯 이라고 부릅니다 .
여기에 사용하여 파이썬에서이 플롯을 만드는 방법입니다 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()