আরে সানকি ডায়াগ্রাম?


89

আমি আর এর মধ্যে সানকি ডায়াগ্রামের সাথে আমার ডেটা প্রবাহটি কল্পনা করার চেষ্টা করছি।

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

অন্য স্ক্রিপ্টগুলি - বা সম্ভবত এমন কোনও প্যাকেজ anyone যে আরও বিকাশযুক্ত তা কি কেউ জানেন? আমার শেষ লক্ষ্যটি সানকি ডায়াগ্রামের এই উদাহরণগুলির মতো, চিত্রের উপাদানগুলির তুলনামূলক আকারের দ্বারা ডেটা প্রবাহ এবং শতাংশ উভয়ই কল্পনা করা ।

আমি আর-সহায়তা তালিকায় কিছুটা অনুরূপ প্রশ্ন পোস্ট করেছি , তবে দুই সপ্তাহ পরে কোনও প্রতিক্রিয়া ছাড়াই আমি স্ট্যাকওভারফ্লোতে এখানে আমার ভাগ্য চেষ্টা করছি।

ধন্যবাদ, এরিক

পুনশ্চ. আমি সমান্তরাল সেট প্লট সম্পর্কে সচেতন , কিন্তু আমি এটি সন্ধান করছি না।

# thanks to, https://tonybreyal.wordpress.com/2011/11/24/source_https-sourcing-an-r-script-from-github/
  sourc.https     <- function(url, ...) {
# install and load the RCurl package 
if (match('RCurl', nomatch=0, installed.packages()[,1])==0) {
  install.packages(c("RCurl"), dependencies = TRUE)
  require(RCurl)  
} else require(RCurl)    

# parse and evaluate each .R script
  sapply(c(url, ...), function(u) {
    eval(parse(text = getURL(u, followlocation = TRUE, 
    cainfo  = system.file("CurlSSL", "cacert.pem", 
    package = "RCurl"))), envir = .GlobalEnv)
 } )
 }

# from https://gist.github.com/1423501
sourc.https("https://raw.github.com/gist/1423501/55b3c6f11e4918cb6264492528b1ad01c429e581/Sankey.R")

# My example (there is another example inside Sankey.R):
inputs = c(6, 144)
losses = c(6,47,14,7, 7, 35, 34)
unit = "n ="

labels = c("Transfers",
           "Referrals\n",
           "Unable to Engage",
           "Consultation only",
           "Did not complete the intake",
           "Did not engage in Treatment",
           "Discontinued Mid-Treatment",
           "Completed Treatment",
           "Active in \nTreatment")

SankeyR(inputs,losses,unit,labels)

# Clean up my mess
rm("inputs", "labels", "losses", "SankeyR", "sourc.https", "unit")

সানকি ডায়াগ্রাম উপরের কোড সহ উত্পাদিত হয়েছে, সানকি ডায়াগ্রাম উপরের কোড সহ উত্পাদিত


4
তীরগুলি আমার কাছে দুর্দান্ত দেখাচ্ছে, মনে হচ্ছে আপনি ঠিকঠাক টিউনটি রেখে গেছেন এবং আপনি আছেন?
রোমান Luštrik

@ রোমান লুইট্রিক, আমি একমত, এই চিত্রটি মোটেও খারাপ নয়, তবে আমার আর দক্ষতাগুলি এখনও সীমাবদ্ধ তাই আমি সত্যিই আর-তে খুব সুন্দর সুর করতে পারছি না, যদি এটিই আপনি বোঝাতে চেয়েছিলেন? আমি অবশ্যই এটি অ্যাডোব ইলাস্ট্রেটর বা এটির মতো কিছুতে করতে পেরেছিলাম তবে এটি পুনরুত্পাদনযোগ্য গবেষণার নীতিটি ভেঙে দেবে, যা আমার জন্য কোনও (একাডেমিক) কাজের কেন্দ্রীয় উপাদান is পোস্টে আমি যে উদাহরণগুলি সংযুক্ত করেছি সেগুলি আপনি দেখেছেন ?
এরিক ব্যর্থ

আমি বুঝতে পারি যে আমার প্রশ্নটি এই অর্থে একটি ভাল প্রশ্ন নয় যে এটি কোনও নির্দিষ্ট প্রোগ্রামিং সমস্যা নয় এবং সরাসরি ব্যবহারিক নয়, তবে কিছুটা উন্মুক্ত প্রশ্ন ( এফএকিউ থেকে )। এই প্রশ্নের উত্তর দেওয়ার জন্য একটিতে আর এর বিভিন্ন গ্রাফিং বিকল্পগুলির উপর নজরদারি করতে হবে এবং সেই ভিত্তিতে একটি উত্তর দিয়ে আমার প্রশ্নের উত্তর দিতে হবে , সেখানে আরও বিকশিত কোনও স্ক্রিপ্ট বা প্যাকেজ নেই , বা একটি সম্পর্কে একটি জানা দরকার আর তে সানকি ডায়াগ্রাম উত্পাদন করার জন্য আরও উন্নত পদ্ধতি এবং এটিতে নির্দেশ করুন। এই প্রশ্নটি পোস্ট করার জন্য আরও ভাল জায়গা থাকতে পারে?
এরিক

4
আমি যে জায়গাতেই আসতে পারি কেবল তা হ'ল ক্রসওয়েডিয়েটেড ডট কম।
রোমান Luštrik

আর-হেল্প মেইলিং তালিকা সম্পর্কে কীভাবে? r-project.org/mail.html
অ্যালেক্স রেনল্ডস

উত্তর:


63

এই প্লটটি networkD3প্যাকেজের মাধ্যমে তৈরি করা যেতে পারে । এটি আপনাকে ইন্টারেক্টিভ সানকি ডায়াগ্রামগুলি তৈরি করতে দেয়। এখানে আপনি একটি উদাহরণ খুঁজে পেতে পারেন । আমি একটি স্ক্রিনশটও যুক্ত করেছি যাতে এটির মতো দেখতে আপনার ধারণা থাকে।

# Load package
library(networkD3)

# Load energy projection data
# Load energy projection data
URL <- paste0(
        "https://cdn.rawgit.com/christophergandrud/networkD3/",
        "master/JSONdata/energy.json")
Energy <- jsonlite::fromJSON(URL)
# Plot
sankeyNetwork(Links = Energy$links, Nodes = Energy$nodes, Source = "source",
             Target = "target", Value = "value", NodeID = "name",
             units = "TWh", fontSize = 12, nodeWidth = 30)

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


4
উদাহরণ লিঙ্কটি নষ্ট হয়েছে
rmstmppr

4
প্রকৃতপক্ষে. প্যাকেজ htmlwidgetsথেকে স্যানকি প্লট চালু হওয়ার পরে আরও ভাল বিকল্প networkD3। আমি পোস্ট আপডেট।
জোনাস টুন্ডো

4
পূর্ণসংখ্যার পরিবর্তে ক্যাপশন হিসাবে সংখ্যার মান পাওয়া সম্ভব? মানগুলি যথাযথভাবে নেওয়া হয়েছে তবে ক্যাপশনটি বৃত্তাকার বন্ধ বলে মনে হচ্ছে। উদাহরণস্বরূপ: মান = 0.8 এবং মান = 0.2 এর আলাদা লাইন প্রস্থ রয়েছে, তবে ক্যাপশন উভয়ের জন্য '0' বলেছে।
নবীন ম্যাথিউ

আপনি যদি নিজের নিজের ডেটাতে কিছু নমুনা নিয়ে এটি পুনরুত্পাদন করার চেষ্টা করেন তবে নিশ্চিত করুন যে প্রথম উত্স আইডি 0 দিয়ে শুরু হয় এবং উত্স এবং লক্ষ্য আইডি ক্রমাগত রয়েছে
রিচার্ড

43

আমি একটি প্যাকেজ ( রিভারপ্লট ) তৈরি করেছি যা সানকি ফাংশনের তুলনায় কিছুটা আলাদা তবে ওভারল্যাপিং কার্যকারিতা রয়েছে এবং এর মতো প্লট তৈরি করতে পারে:

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


এটি দেখতে সত্যিই চিত্তাকর্ষক! আমি এটি ASAP একবার দেখুন।
এরিক

39

আপনি যদি এটি আর এর মাধ্যমে করতে চান তবে আপনার সেরা বিডটি @ রোমানের পরামর্শ বলে মনে হচ্ছে - সানকিআর ফাংশন হ্যাক করুন । উদাহরণস্বরূপ - নীচে আমার খুব দ্রুত ফিক্সটি দেওয়া হয়েছে - কেবল প্রাচ্যমুখী লেবেলগুলি উল্লম্বভাবে, আস্তে আস্তে সেগুলি অফসেট করে এবং কিছুটা আরও ভাল দেখানোর জন্য ইনপুট রেফারেলগুলির জন্য ফন্ট হ্রাস করে। এই পরিবর্তনটি কেবল সানকিআর ফাংশনে 171 এবং 223 লাইন পরিবর্তন করেছে :

    #line171 - change oversized font size of input label
    fontsize = max(0.5,frInputs[j]*1.5)#1.5 instead of 2.5 

    #line223 - srt changes from 35 to 90 to orient labels vertically, 
    #and offset adjusts them to get better alignment with arrows
    text(txtX, txtY, fullLabel, cex=fontsize, pos=4, srt=90, offset=0.1)

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

ত্রিকোণমিতিতে আমি কোনও টেক্কা নই, তবে তীরের দিক পরিবর্তন করার জন্য এটি আপনার প্রয়োজন। এটি আমার দৃষ্টিতে আদর্শ হবে - আপনি যদি লস তীরগুলি সামঞ্জস্য করতে পারেন তবে তারা অনুভূমিকভাবে বরং উলম্বভাবে স্থিত হয়। অন্যথায়, আমার সমাধান কেন লেবেলগুলির ওরিয়েন্টেশনের সাথে সমস্যার সমাধান করে, এটি চিত্রটি আরও বেশি পাঠযোগ্য করে তোলে না ...


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

24

আরচার্টগুলি ছাড়াও , সানকি চিত্রগুলি এখন আর গুগলিস (সংস্করণ> = 0.5.0) এর মাধ্যমেও তৈরি করা যেতে পারে । উদাহরণস্বরূপ, এই পোস্টটি googleVis ব্যবহার করে নিম্নলিখিত চিত্রের প্রজন্মের বর্ণনা দেয়: এখানে চিত্র বর্ণনা লিখুন


15

আর এর প্যাকেজ এছাড়াও এটি (থেকে ?alluvial) করবে।

# install.packages(c("alluvial"), dependencies = TRUE)
require(alluvial)

# Titanic data
tit <- as.data.frame(Titanic)

# 4d
alluvial( tit[,1:4], freq=tit$Freq, border=NA,
     hide = tit$Freq < quantile(tit$Freq, .50),
     col=ifelse( tit$Class == "3rd" & tit$Sex == "Male", "red", "gray") )

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



6

এই সংজ্ঞাটি বিচার করে সমান্তরাল সেট প্লটের মতো এই ফাংশনটিতে বিভাজন এবং প্রবাহগুলি একত্রিত করার ক্ষমতা (যেমন একাধিক সংক্রমণের মধ্য দিয়ে) অভাব রয়েছে।

যেহেতু সানকি ডায়াগ্রামগুলি ভারিত গ্রাফকে নির্দেশিত , তাই কিউগ্রাফের মতো প্যাকেজটি কার্যকর হতে পারে।

SankeyRফাংশন পরিষ্কার লেবেল যদি আপনি সাজানোর পাঠ্য হিসেবে অবরোহী লোকসান ওভারল্যাপিং ছাড়া তীর মাথা কাছাকাছি স্থাপন করা হয় প্রদান করে।


4
ক্রমহ্রাসমান ক্রমানুসারে সাজানোর ফলে চিত্রের দিকনির্দেশক গুণটি ভঙ্গ হবে break আমি যে চিত্রটি জমা দিয়েছি তা যদি আপনি ঘনিষ্ঠভাবে দেখেন তবে আপনি দেখতে পাবেন যে সময়টি এক্স-অক্ষের উপর রয়েছে, সুতরাং বর্তমান ক্রম। আমি সচেতন আছি sankey-diagrams.com আমি যখন দেখলাম যে ওয়েবসাইট খোলা অপ আর ছিল এবং একটা চমৎকার স্যাঙ্কই চিত্র উত্পাদন এবং এটি নিবন্ধ, আমার প্রথম চিন্তা ggplot2
এরিক 1

5

// সানকিবিল্ডার ডটকমকে একবার দেখুন যেমন এটি সমাধানে যাওয়ার জন্য প্রস্তুত রয়েছে যেখানে আপনি সময়ের সাথে সাথে আপনার ডেটা এবং প্লেব্যাকের বিভিন্নতা আপলোড করতে পারবেন। রূপান্তরটি ভাল কাজ করে (আপনার প্রশ্নের ইউটিউব ডেমোর অনুরূপ)। আপনি যদি সানকিট্রেন্ড ডেমোটি লোড করেন তবে এতে অনেকগুলি সময় স্লট অন্তর্ভুক্ত থাকে (ডেটার বছরগুলি)। একবার লোড হয়ে গেলে (স্বয়ংক্রিয়ভাবে বানকি তৈরি করে), সময় স্লটগুলির প্লেব্যাকের জন্য পৃষ্ঠার উপরের ডানদিকে কোণে প্লে বোতামটি ক্লিক করুন, আপনি এমনকি বিরতি দিয়ে সময় পুনরায় শুরু করতে পারেন। ডেমো ইউআরএল এখানে রয়েছে: সানকিট্রেন্ড আশা করি এটি নিখুঁত সাঁকি চিত্রের জন্য আপনার অনুসন্ধানে সহায়তা করবে।


4

সম্পূর্ণতার জন্য, ggalluvialপ্যাকেজটিও রয়েছে যা ggplot2 extensionপলি / সানকি ডায়াগ্রামগুলির জন্য একটি ।

প্যাকেজের ডকুমেন্টেশন থেকে নেওয়া এখানে একটি উদাহরণ

# devtools::install_github("corybrunson/ggalluvial", ref = "optimization")
library(ggalluvial)

titanic_wide <- data.frame(Titanic)
ggplot(data = titanic_wide,
       aes(axis1 = Class, axis2 = Sex, axis3 = Age,
           y = Freq)) +
  scale_x_discrete(limits = c("Class", "Sex", "Age"), expand = c(.1, .05)) +
  xlab("Demographic") +
  geom_alluvium(aes(fill = Survived)) +
  geom_stratum() + geom_text(stat = "stratum", label.strata = TRUE) +
  theme_minimal() +
  ggtitle("passengers on the maiden voyage of the Titanic",
          "stratified by demographics and survival") +
  theme(legend.position = 'bottom')

ggplot(titanic_wide,
       aes(y = Freq,
           axis1 = Survived, axis2 = Sex, axis3 = Class)) +
  geom_alluvium(aes(fill = Class),
                width = 0, knot.pos = 0, reverse = FALSE) +
  guides(fill = FALSE) +
  geom_stratum(width = 1/8, reverse = FALSE) +
  geom_text(stat = "stratum", label.strata = TRUE, reverse = FALSE) +
  scale_x_continuous(expand = c(0, 0), 
                     breaks = 1:3, labels = c("Survived", "Sex", "Class")) +
  scale_y_discrete(expand = c(0, 0)) +
  coord_flip() +
  ggtitle("Titanic survival by class and sex")

সম্মতি প্যাকেজ (v0.2.1.9000) দ্বারা 2018-11-13 এ তৈরি করা হয়েছে


1

কেবলমাত্র এমন প্যাকেজটি খোলুন যা কার্যপ্রবাহের স্তরগুলি কল্পনা করার জন্য একটি পলল ডায়াগ্রাম ব্যবহার করে। যেহেতু পাতাগুলি ফর্মটি ব্যবহার করা হয় তখন ইতিহাস রক্ষিত থাকে, তাই কিনারাগুলিতে কোনও ক্রসওভার নেই।

https://github.com/claytontstanley/shiny.alluvial

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

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