'da gördüğüm bir grafiğin nasıl çıkarıldığını merak ettim. Bunu son zamanlardaki bir ekonomistte gördüm ve kimsenin ggplot kullanarak çoğaltmaya yardımcı olacak bir kodu olup olmadığını merak ediyorum. Economist ChartEkonomist dergisi
Teşekkürler!
'da gördüğüm bir grafiğin nasıl çıkarıldığını merak ettim. Bunu son zamanlardaki bir ekonomistte gördüm ve kimsenin ggplot kullanarak çoğaltmaya yardımcı olacak bir kodu olup olmadığını merak ediyorum. Economist ChartEkonomist dergisi
Teşekkürler!
Biraz kullanan tek baz arsa işlevselliği etrafında oynanan herhangi biçimlendirme ile her yerde metin ekleyebilirsiniz.
bigmacprice <- data.frame(
country = c("Switzerland", "Brazil", "Euro area",
"Canada", "Japan", "United States",
"Britain", "Singapore", "South Korea",
"South Africa", "Mexico", "Thailand",
"Russia", "Malaysia", "China"),
price = c(6.78, 5.26, 4.79, 4.18, 3.91, 3.71,
3.63, 3.46, 3.03, 2.79, 2.58, 2.44,
2.39, 2.25, 2.18)
)
plotbigmac <- function(mac, base = "United States", xlim = c(-40, 100)) {
mac <- mac[order(mac$price),]
base = which(mac$country == base)
height <- (mac$price/mac[base, "price"] - 1) * 100
par(bg = "#d0e0e7", col.main = "#262324", col.axis = "#393E46",
mar = c(8, 8, 6, 6), las = 1)
barplot(height, width = .1, space = .4,
names.arg = mac$country, #cex.names = .8,
col = "#01516c", border = "#7199a8", # border = "#577784",
horiz = TRUE, xlim = c(-40, 100), axes = FALSE)
axis(3, lty = 0)
title(main = "Bunfight\nBig Mac index", col = "#393E46")
abline(v = seq(-100, 100, 10), col = "white", lwd = 2)
abline(v = 0, col = "#c8454e", lwd = 2)
par(xpd = TRUE)
for (i in 1:nrow(mac)) {
rect(105, (i - 1)/7, 118, i/7 - 0.05,
col = "white", border = "#7199a8")
text(112, (i - 1)/7 + 0.05, mac$price[i], cex = 0.8, col = "#393E46")
}
rect(-120, 2.5, -90, 3, col = "#c8454e", border = "#c8454e")
text(-68, -.2, "Sources:", col = "#393E46")
text(-64, -.3, "McDonald's;", col = "#393E46")
text(-60, -.4, "The Economist", col = "#393E46")
}
plotbigmac(bigmacprice)
O (tam eşleşme olmayabilir ex i uğramadan hizaya sağa nasıl bilmiyorum.
İşte
bunu üreten kod şudur: Bu sonuç metni doğrudan) ve metni yeniden boyutlandırmaya çalışırsanız, metin etrafta zıplayacaktır, bu nedenle parametrelerinizi ihtiyaçlarınıza uyacak şekilde daha fazla ayarlamalısınız. Ancak, yalnızca temel çizim fonksiyonunu kullanarak çok uzaklaştığınızı göstermeye devam ediyor.
DÜZENLEME: Yorum edildiği gibi, beyaz şeritler çubukları geçiyor. Bu kaçınılmazdır ve arsa alanını yeniden çizeceğinden, barplot
numarasına başka bir çağrı ile ayarlanamaz. Dolayısıyla, barplot
kaynak koduna bir göz atmalı ve bu amaç için özelleştirmeliyiz (bunun R'de ne kadar kolay olduğunu sevin). Ancak şimdi, R'deki rahat temellerin dışına taşındık (yani, barplotta inşa edilmiş).Burada başka Yine de oraya edilir:
plotBigMac <- function(mac, base = "United States") {
old.par <- par(no.readonly = TRUE)
on.exit(par(old.par))
# Create data:
mac <- mac[order(mac$price),]
base = which(mac$country == base)
height <- (mac$price/mac[base, "price"] - 1) * 100
# Costume 'barplot'
NN <- length(height)
width <- rep(1, length.out = NN)
delta <- width/2
w.r <- cumsum(width + 0.5)
w.m <- w.r - delta
w.l <- w.m - delta
xlim <- c(range(-.01 * height, height)[1], 100)
ylim <- c(min(w.l), max(w.r))
par(bg = "#d0e0e7", col.main = "#262324", col.axis = "#393E46",
mar = c(8, 8, 6, 6), las = 1, cex = 0.9)
plot.new()
plot.window(xlim, ylim)
abline(v = seq(-100, 100, 20), col = "white", lwd = 2)
rect(0, w.l, height, w.r, col = "#01516c", border = "#7199a8", lwd = 1)
# Lines and axis
abline(v = 0, col = "#c8454e", lwd = 2)
axis(3, axTicks(3), abs(axTicks(3)), lty = 0)
axis(2, labels = mac$country, at = w.m, lty = 0)
# Move outside of plot area
par(xpd = TRUE)
# Text misc.
text(5, (w.l[base] + w.r[base])/2, "nil", font = 3)
text(8, w.r[NN] + 2.3, "+")
text(-8, w.r[NN] + 2.3, "-")
# Create price boxes:
rect(105, w.l, 125, w.r,
col = "white", border = "#7199a8", lwd = 1)
text(115, (w.r + w.l)/2, mac$price, cex = 0.8, col = "#393E46")
}
bu oluşturur Hangi:
latticeExtra paketinin bir teması , bir başlangıç olarak yardımcı olacak The Economist dergisinden sonra biçimlendirilmiştir. Bugünlerde ggplot2 için feryat tüm çocuklar ise lattice kullanır Ancak
...
Bu çılgın çocuklar ... bana bir çocuk için – Shane
+1. bu iyi hissettiriyor. LatticeExtra kontrol edecek mi ... aslında Ekstra –
duymadım Bana bir eski pharte, ama hala temel grafikler ve kafes gibi. –
bigmacprice=rnorm(10)
names(bigmacprice)=1:10
par(bg="lightblue")
barplot(sort(bigmacprice),
horiz=T,
legend="Bunfight!! \nBigmac index \nyadda \nyadda \nmmnnnkay ",
args.legend = list( x = "topleft",
bty="n"
),
col='darkblue'
)
Bu tam olarak bir kopya değildir ... Metni(), efsaneyi kötüye kullanmak yerine kullanırdım. Eğer çalıştırırsam (R2.11.1), çubuklar üzerinde yüzen metin. OP'in aklında ne olduğunu düşünmeyin ... –
Sana ggplot istedi biliyorum ama (bu çalıştı ama benim için bir tane yapmak istediği nasıl hiçbir fikrim yok benim yolum).
Ve böylece, bu geldi:
http://code.google.com/apis/visualization/documentation/reference.html#barformatter
ilginç bulacaksınız Umut!
İyi şanslar!
Trufa
LearnR blogda ggplot2 ile bu çizelgeleri oluşturarak iyi bir bakış var: Ben bir R grafiğin kesin dizgi elde etmek için en iyi (en hızlı, en kolay) yolu kullanmak olduğunu düşünüyorum http://learnr.wordpress.com/2009/06/01/ggplot2-positioning-of-barplot-category-labels/
temel R fonksiyonları ana detayı (bu durumda geom_bar ile ggplot'u veya taban grafikleri) kullanın ve arsaları bir SVG dosyasına kaydedin. Favori düzenleme paketinizde SVG'yi açın (Inkscape her kullandığımda beni daha fazla etkiliyor) ve daha sonra buradaki son dizgiyi yap.
Daha sonra kepçeye gibi bir efsane şeyler yapmak ve etrafında hareket, elemanları silmek için, herhangi yazı vb
Bu tekrarlanabilirlik ilkesi ile çelişiyor. Siz ve diğerleri arsalarınızı yeniden oluşturamayacaksınız. – VitoshKa
Inkscape hakkında emin değilim, ancak GIMP'yi kullanarak görüntüleri program aracılığıyla düzenleyebilirsiniz. http://www.gimp.org/tutorials/Basic_Batch/ –
Bu sorudan da anlaşılacağı gibi The Economist'in planı da tekrarlanabilirlik ilkesini ihlal ediyor. Bu nedenle, orijinaline sadık kalmak için, reprodüksiyon da kabul edilemez olmalıdır. –
tam olarak bu arsa yeniden olamaz, ben, https://github.com/jrnold/ggplotJrnold ggplot için bir Ekonomist temasını yazdım. Github sayfasının README örneğine bakın.
+1. –
Yalnızca temel R grafiklerini kullanamaz mısınız? Yatay bir 'barplot' ve 'abline' işi yapacak. – nico
Bir çoğaltma ne kadar istiyorsun? İnsanlar "Bunu nasıl kopyalayabilirim?" Dediğinde sevmiyorum detay seviyesini vermeden. Örneğin, ABD'nin sıfır noktasında 'nil' ye ihtiyacınız var mı? Tüm hançer ve çift hançer dipnotları? Yazı tipi? Ayrıca, "ggplot'ta bir barplotun nasıl yapıldığını biliyorum" (ve belki de bir örnek verelim) gibi bilginizin bir başlangıç noktasına sahip olmak da güzel olurdu, ama biraz bunun gibi bir şey üretmek için stil konusunda daha fazla tavsiyeye ihtiyacım var. . – Spacedman
Haklısın Daha açık olmalıyım - ama insanların bu soruyu nasıl yüreklendirdiğinden gerçekten zevk aldım! – datayoda