আমরা কীভাবে এক্সকেসিডি স্টাইলের গ্রাফ তৈরি করতে পারি?


696

দৃশ্যত, লোক মূর্ত আউট কিভাবে করতে xkcd শৈলী গ্রাফ ম্যাথামেটিকাল মধ্যে এবং ক্ষীর । আমরা কি আর-এ করতে পারি? Ggplot2 পক্ষে? একটি জিওম_এক্সকিসিডি এবং / অথবা থিম_এক্সকেসিডি?

আমি বেস গ্রাফিকগুলিতে অনুমান করছি, (সমেত (এক্সকেসিডি = সত্য)? আমি এটা কিভাবে করব?

xkcd # 1064

Ggplot2- তে প্রথম ছুরিকাঘাত (এবং আরও নিখুঁতভাবে নীচে দেখানো হয়েছে) হিসাবে, একটি লাইনে জিটার যুক্তি যুক্ত করে একটি দুর্দান্ত হাতে আঁকানো চেহারা তৈরি করে। সুতরাং -

ggplot(mapping=aes(x=seq(1,10,.1), y=seq(1,10,.1))) + 
  geom_line(position="jitter", color="red", size=2) + theme_bw()

এটি একটি দুর্দান্ত উদাহরণ তৈরি করে - তবে অক্ষ এবং ফন্টগুলি আরও জটিল দেখায়। হরফ হ'ল (নীচে), যদিও প্রদর্শিত হবে। অক্ষগুলি মোকাবেলা করার একমাত্র উপায় কি এগুলি ফাঁকা করে হাতে নিয়ে আসা? এর থেকেও কি আরও সুন্দর সমাধান? বিশেষত, ggplot2 এ, নতুন থিম সিস্টেমে এলিমেন্ট_লাইনকে কি জিটারের মতো যুক্তিটি সংশোধন করা যেতে পারে?


8
এক্সকেসিডি গ্রাফের প্রয়োজনীয় উপাদান হিসাবে আপনি ঠিক কী বিবেচনা করবেন? টীকা? স্বেচ্ছাসেবী কার্ভস, অক্ষ এবং আঁশ? হাত-টানা চেহারা এবং বোধ?
এসএমসিজি

8
আমি গ্রাফের সমস্ত উপাদান: অক্ষ, পাঠ্য, লাইন ইত্যাদির হাত
আঁকানো

61
বাধ্যতামূলক মাউস ওভার ভুলবেন না!
জর্জেন আর

4
এছাড়াও, ফন্টগুলি xkcdsucks.blogspot.com/2009/03/…
jebyrnes

11
আমি আর আর এক্সকেডিকে অনেক পছন্দ করি, যারা এই মেম শুরু করেছেন তাদের মাথাটি ডান হওয়া উচিত। একটি পেন্সিল ব্যবহার করুন , মানুষ!
nnot101

উত্তর:


424

আপনি নিম্নলিখিত প্যাকেজটি বিবেচনা করতে চাইতে পারেন:

প্যাকেজ এক্সকেসিডি : একটি এক্সকেসিডি স্টাইলে ggplot2 গ্রাফিক্স প্লট করা।

library(xkcd)
vignette("xkcd-intro")

কিছু উদাহরণ (স্ক্যাটারপ্লটস, বার চার্ট):

  • Scatterplot:

Scatterplot

  • বার চার্ট:

বার চার্ট


উইন্ডোজ থেকে রি-রিলিজ রিডমিজকে @ সিমিলিগ : "উত্স প্রকাশিত হওয়ার প্রায় ১-৩ দিন পরে বাইনারি প্যাকেজগুলি সিআরএন - তে পাওয়া যাবে।"
জিএসই

43
প্রকাশনাগুলিতে প্যাকেজটি ব্যবহার করার সময় আমার কী উদ্ধৃতি দিতে হবে?
ziggystar

1
+1 এবং দুর্দান্ত প্যাকেজটির জন্য ধন্যবাদ। ফন্টগুলি ইনস্টল করতে আমার সমস্যা হচ্ছে ! ইন্ট্রো ফাইলে একটি সংশোধন, (সেকেন্ড -২.১, লাইন 5, .tff -> .ttf)। অন্য একটি এখনও মুলতুবি !!
শম্ভো

1
দুর্দান্ত কাজ, আমি সত্যিই থিম_এক্সকিসিডি () পছন্দ করি যা আমাদের এটিকে খুব সহজেই ব্যবহার করতে দেয়। আপনি যদি এটির উন্নতি করতে চান তবে আমি আপনাকে পরামর্শ দেব যে xkcdaxis () এটি যুক্তি ছাড়াই বলা যেতে পারে (এটি কেবলমাত্র সাধারণ অক্ষটি আঁকবে)। উদাহরণস্বরূপ ggplot (ডেটা = টেম্পল.এল, এএসস (এক্স = রাজ্য.কোড, y = নমুনা.মূল্য, পূরণ = বছর)) + জিওম_বক্সপ্লট () + কর্ড_কার্টেসিয়ান (ইলিম = সি (0,40)) + থিম_এক্সকিসিডি () + এক্সকেসিডিএক্স ()
জিপ

মনে হচ্ছে এটির কিছু ভেঙে গেছে। ইনস্টল করার xkcdকাজ, কিন্তু বের করার চেষ্টা library(xkcd)উৎপাদনের > library(xkcd) Loading required package: extrafont Registering fonts with R Error in loadNamespace(j <- i[[1L]], c(lib.loc, .libPaths()), versionCheck = vI[[j]]) : there is no package called ‘acepack’ Error: package or namespace load failed for ‘xkcd’এবং জন্য চেষ্টা acepackউৎপাদনের> install.packages("ace") Warning in install.packages : package ‘ace’ is not available (for R version 3.2.1)
শন Mehan

216

অন্যান্য উত্তরগুলির মতো একই লাইন ধরে ভাবতে, আমি চার্টটি "আন-জিপিপ্লিট্টেড" করেছি এবং এক্স-অক্ষের লেবেল অবস্থানগুলির (যা এক্সকেসিডিতে সাধারণ বলে মনে হয়) এবং নমনীয় লেবেলের নমনীয়তার সাথে যুক্ত করেছি the চার্ট।

দ্রষ্টব্য যে আমার সাথে হিউমার সানস ফন্টটি লোড করার সাথে কয়েকটি সমস্যা ছিল এবং ম্যানুয়ালি এটিকে ওয়ার্কিং ডিরেক্টরিতে ডাউনলোড করা হয়েছিল।

এখানে চিত্র বর্ণনা লিখুন

এবং কোড ...

library(ggplot2)
library(extrafont)

### Already have read in fonts (see previous answer on how to do this)
loadfonts()

### Set up the trial dataset 
data <- NULL
data$x <- seq(1, 10, 0.1)
data$y1 <- sin(data$x)
data$y2 <- cos(data$x)
data$xaxis <- -1.5

data <- as.data.frame(data)

### XKCD theme
theme_xkcd <- theme(
    panel.background = element_rect(fill="white"), 
    axis.ticks = element_line(colour=NA),
    panel.grid = element_line(colour="white"),
    axis.text.y = element_text(colour=NA), 
    axis.text.x = element_text(colour="black"),
    text = element_text(size=16, family="Humor Sans")
    )

 ### Plot the chart
 p <- ggplot(data=data, aes(x=x, y=y1))+
      geom_line(aes(y=y2), position="jitter")+
      geom_line(colour="white", size=3, position="jitter")+
      geom_line(colour="red", size=1, position="jitter")+
      geom_text(family="Humor Sans", x=6, y=-1.2, label="A SIN AND COS CURVE")+
      geom_line(aes(y=xaxis), position = position_jitter(h = 0.005), colour="black")+
      scale_x_continuous(breaks=c(2, 5, 6, 9), 
      labels = c("YARD", "STEPS", "DOOR", "INSIDE"))+labs(x="", y="")+
      theme_xkcd

ggsave("xkcd_ggplot.jpg", plot=p, width=8, height=5)

এটি চমৎকার! এখন যদি কেবলমাত্র এলিমেন্ট_লাইনটিকে থিমগুলিতে রচনা করার জন্য একটি তাত্পর্যপূর্ণ যুক্তি গ্রহণ করা হত ... যা চুক্তিটি সিল করে দেবে, আমি মনে করি।
jebyrnes

1
আপনার কোডটিতে কোনও অনুপস্থিত প্যাকেজ থাকতে পারে, আমি "ত্রুটি পেয়েছি: থিম_xkcd <থিম" ফাংশন "থিম" সন্ধান করতে পারি না -
ওউ জেসেন

1
এইচএম, ত্রুটি বার্তার সমাধান কী? - ggplot2কৌশলটি নতুন সংস্করণ করেছে।
রিকো

আমি দেখতে পেলাম যে লাইনগুলি মসৃণ এবং বিদ্রূপযুক্ত উভয় হওয়ায় কোলাহল করা ডেটার geom_smoothসাথে ব্যবহার করে method = "loess", span = 0.6, se = FALSEএবং position = position_jitter(h=0.005)আমাকে আরও ভাল ফলাফল দিচ্ছে।
zhihio

এখনও কিছু গায়েবি আছে? গ্রিডে অধিকতর কল all .Call Zusätzlich: Warnmeldungen: 1: ইন grid.Call (C_textBounds, as.graphicsAnnot (এক্স $ ট্যাগ), x $ X, x $ Y: পশম Familie "হাস্যরস সান্স" konnte kein Zeichensatz gefunden werden ... Ausführung angehalten
কলিবান

189

বেসিক লাইন অঙ্কন ফাংশন:

xkcd_line <- function(x, y, color) {
  len <- length(x);
  rg <- par("usr");
  yjitter <- (rg[4] - rg[3]) / 1000;
  xjitter <- (rg[2] - rg[1]) / 1000;
  x_mod <- x + rnorm(len) * xjitter;
  y_mod <- y + rnorm(len) * yjitter;
  lines(x_mod, y_mod, col='white', lwd=10);
  lines(x_mod, y_mod, col=color, lwd=5);
}

প্রাথমিক অক্ষ:

xkcd_axis <- function() {
  rg <- par("usr");
  yaxis <- 1:100 / 100 * (rg[4] - rg[3]) + rg[3];
  xaxis <- 1:100 / 100 * (rg[2] - rg[1]) + rg[1];
  xkcd_line(1:100 * 0 + rg[1] + (rg[2]-rg[1])/100, yaxis,'black')
  xkcd_line(xaxis, 1:100 * 0 + rg[3] + (rg[4]-rg[3])/100, 'black')
}

এবং নমুনা কোড:

data <- data.frame(x=1:100)
data$one <- exp(-((data$x - 50)/10)^2)
data$two <- sin(data$x/10)
plot.new()
plot.window(
    c(min(data$x),max(data$x)),
    c(min(c(data$one,data$two)),max(c(data$one,data$two))))
xkcd_axis()
xkcd_line(data$x, data$one, 'red')
xkcd_line(data$x, data$two, 'blue')

উত্পাদন:

উদাহরণ লেখচিত্র chart


137

Xkcd ফোরাম এবং extrafontপ্যাকেজ থেকে লিঙ্কের উপর ভিত্তি করে এখানে ফন্টগুলির একটি প্রচেষ্টা :

উপরে উল্লিখিত হিসাবে xkcd সাইটে ফন্ট সম্পর্কে একটি ফোরাম আলোচনা আছে : আমি যে প্রথমটি খুঁজে পেলাম তা ধরলাম, অন্যান্য (আরও ভাল?) বিকল্প থাকতে পারে (@ জেবির্নস উপরের মন্তব্যে সম্ভাব্য ফন্টগুলির জন্য অন্য উত্স পোস্ট করে - টিটিএফ ফাইল হয় এখানে ; কেউ উৎসের জন্য একটি 404 ত্রুটি রিপোর্ট, আপনি অন্যথায় চেষ্টা করতে পারে এখানে বা এখানে , জন্য উপযুক্তভাবে সেই URL গুলিকে বদলে xkcdFontURLনিচের তুমি গিট-হাব পোস্ট লিঙ্ক পুনরুদ্ধার করতে একটি বিট কঠিন কাজ করতে হতে পারে)

   xkcdFontURL <- "http://simonsoftware.se/other/xkcd.ttf"
   download.file(xkcdFontURL,dest="xkcd.ttf",mode="wb")

(এটি চটজলদি, এক-অফ ব্যবহারের জন্য: নিয়মিত ব্যবহারের জন্য আপনার এটি কিছু স্ট্যান্ডার্ড সিস্টেম ফন্ট ডিরেক্টরিতে রাখা উচিত))

   library(extrafont)

ফন্টগুলি সম্পর্কে সবচেয়ে দরকারী তথ্য ছিল এক্সট্রাফন্ট গিথুব সাইটে - এটি সেখান থেকে নেওয়া হয়েছে

font_import(".")   ## because we downloaded to working directory
loadfonts()

গিথুব সাইট থেকে কমবেশি ভারব্যাটিম নেওয়া উদাহরণ:

library(ggplot2)
p <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
  ggtitle("Fuel Efficiency of 32 Cars") +
  xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
  theme(text=element_text(size=16, family="xkcd"))

ggsave("xkcd_ggplot.pdf", plot=p,  width=4, height=4)
## needed for Windows:
##   Sys.setenv(R_GSCMD = "C:/Program Files/gs/gs9.05/bin/gswin32c.exe")
embed_fonts("xkcd_ggplot.pdf")

এখানে চিত্র বর্ণনা লিখুন


32

আমি কেবল আরস্টুডিও ব্যবহার করে একটি এক্সকেসিডি থিমযুক্ত বিশ্লেষণ ক্যালেন্ডার ডিজাইন করেছি। বার প্লট এক্সকেসিডি শৈলীর উদাহরণ এখানে

  • হরফ ব্যবহৃত = হিউমারসান্স.টিটিএফ [উপরে দেওয়া লিঙ্ক]
  • প্যাকেজ ব্যবহৃত হয়েছে [xkcd]

এই প্লট তৈরি করতে 'বিপদস্থাগুলি' এর জন্য বার প্লট প্রক্সি

এখানে কোড ব্যবহৃত হয়

#using packages xkcd, ggplot 
library(xkcd)
library(ggplot2)
font_import(pattern="[H/h]umor")
loadfonts()

### Set up the trial dataset 
d1 <- data.frame('type'=c('DROWNING','RADIATION','TOILET',"ELECTRICAL",'NOISE','PANTRY','YOUR    FALLING ON OBJECTS','OBJECTS FALLING ON YOU','BOSS','FIRE','TRAVEL TO WORK'),'score'=c(2,2,3,6,6,6,11,14,21,26,30))

# we will keep adding layers on plot p. first the bar plot
p <- NULL
p <- ggplot() + xkcdrect(aes(xmin = type-0.1,xmax= type+0.1,ymin=0,ymax =score),
                     d1,fill= "#D55E00", colour= "#D55E00")  +
     geom_text(data=d1,aes(x=type,y=score+2.5,label=score,ymax=0),family="Humor Sans") +   coord_flip()

#hand drawn axes
d1long <- NULL
d1long <- rbind(c(0,-2),d1,c(12,32))
d1long$xaxis <- -1
d1long$yaxis <- 11.75

# drawing jagged axes
p <- p + geom_line(data=d1long,aes(x=type,y=jitter(xaxis)),size=1)
p <- p + geom_line(data=d1long,aes(x=yaxis,y=score), size=1) 

# draw axis ticks and labels
p <- p +  scale_x_continuous(breaks=seq(1,11,by=1),labels = data$Type) +
     scale_y_continuous(breaks=NULL)

#writing stuff on the graph
t1 <- "GOOGLE RESULTS"
p <- p + annotate('text',family="Humor Sans", x=12.5, y=12, label=t1, size=6) 

# XKCD theme
p <- p + theme(panel.background = element_rect(fill="white"),
           panel.grid = element_line(colour="white"),axis.text.x = element_blank(), 
           axis.text.y = element_text(colour="black"),text = element_text(size=18, family="Humor   Sans") ,panel.grid.major = element_blank(),panel.grid.minor = element_blank(),panel.border = element_blank(),axis.title.y = element_blank(),axis.title.x = element_blank(),axis.ticks = element_blank())

print(p)

14

এটি একটি খুব, খুব রুক্ষ শুরু এবং কেবল রেখাগুলির হাতে আঁকা চেহারা এবং অনুভূতিকে (আংশিকভাবে) কভার করে। এটি স্বয়ংক্রিয় করতে কিছুটা সময় লাগবে তবে প্রতিক্রিয়া ফাংশনে কিছু এআর (1) শব্দ যোগ করলে এটি কিছুটা হাত টানা মনে হতে পারে

set.seed(551)
x <- seq(0, 1, length.out = 1000)
y <- sin(x)

imperfect <- arima.sim(n = length(y), model = list(ar = c(.9999)))
imperfect <- scale(imperfect)
z <- y + imperfect*.005
plot(x, z, type = "l", col = "blue", lwd = 2)

13

ggplot2উপরের কিছু কোড ব্যবহার করে লাইনগুলিতে আমার দেওয়া হল :

ggplot()+geom_line(aes(x=seq(0,1,length.out=1000),y=sin(x)),position=position_jitter(width=0.02),lwd=1.5,col="white")+
  geom_line(aes(x=seq(0,1,length.out=1000),y=sin(x)),position=position_jitter(width=0.004),lwd=1.4,col="red")+
  geom_line(aes(x=seq(0,1,length.out=1000),y=cos(x)),position=position_jitter(width=0.02),lwd=1.5,col="white")+
  geom_line(aes(x=seq(0,1,length.out=1000),y=cos(x)),position=position_jitter(width=0.004),lwd=1.4,col="blue")+
  theme_bw()+theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())

অক্ষগুলি কীভাবে প্রতিস্থাপন করা যায় তা নিশ্চিত নয়, তবে একই পদ্ধতিটি ব্যবহার করতে পারে jitter। তারপরে এটি এক্স কেসিডি থেকে ফন্টটি আমদানি করার এবং লেয়ারিংয়ের বিষয় geom_text

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.