এই চার্টের জন্য কি কোনও নাম রয়েছে - পাই চার্ট এবং মেক্কো প্লটের মধ্যে ক্রস বাছাই করা


9

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

প্রতিটি অঞ্চলের জন্য আয়তক্ষেত্রগুলির মধ্যে সাদা সীমানা রয়েছে বলে আসলটি আরও ভাল দেখাচ্ছে looks

আশ্চর্যজনকভাবে, এটি আসলে আমাকে পরিসংখ্যানগত গ্রাফিক হিসাবে খুব খারাপ মনে করে না, যদিও এটি অর্থপূর্ণ কিছুতে রঙিন ম্যাপযুক্ত ব্যবহারের মাধ্যমে উন্নত করা যেতে পারে। নিউ ইয়র্ক টাইমস ব্যবহার করে মার্কিন 2011 বাজেটের প্রদর্শিত একটি শক্তিশালী ইন্টারেক্টিভ সংস্করণ ব্যবহৃত হয়েছে ।

একটি আকর্ষণীয় চ্যালেঞ্জ হ'ল এটি আঁকতে এবং এটিকে যুক্তিসঙ্গত দেখানোর জন্য একটি স্বয়ংক্রিয় অ্যালগরিদম সম্পর্কে ভাবনা। আয়তক্ষেত্রগুলিকে একটি গ্রহণযোগ্য সীমার মধ্যে বিভিন্ন দিক অনুপাত থাকতে দেওয়া দরকার।

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


এই প্রশ্নটি দিয়ে শুরু হওয়া প্রকল্পের শেষ ফলাফলটি এখান থেকে লিঙ্কযুক্ত ইন্টারেক্টিভ ওয়েব টুলটিতে দেখা
পিটার এলিস

উত্তর:


11

এটি একটি ট্রিম্যাপ, আমার অনুমান ( http://en.wikedia.org/wiki/Treemapping )।

বেশ কয়েকটি প্যাকেজ রয়েছে, যেমন আর-তে, যা ট্রিপম্যাপ তৈরি করে। প্যাকেজগুলির মধ্যে একটিকে ট্রিম্যাপ বলা হয় এবং অন্যটি পোর্টফোলিও। উদাহরণস্বরূপ, নাথান ইয়া কীভাবে আর ( http://flowingdata.com/2010/02/11/an-easy-way-to-make-a-treemap/ ) ব্যবহার করে একটি বৃক্ষ মানচিত্র তৈরি করবেন সে সম্পর্কে একটি টিউটোরিয়াল সরবরাহ করে ।


12

প্রশ্নটি নাম, তবে এটি কতটা ভাল কাজ করে তাও আলোচনার জন্য উন্মুক্ত।

এখানে বিকল্প হিসাবে আরও কিছু প্রসেসিক, একটি অনুভূমিক বারের চার্ট।

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

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

আমি পরামর্শ দিচ্ছি যে বৃক্ষের কিছু আপীল তাদের আপেক্ষিক অভিনবত্বের মধ্যে। তারা ডজন চার্টের চেয়ে বার চার্টের চেয়ে ভাল বা আরও ভাল কাজ করতে পারে, যা দীর্ঘ কলামে তালিকাভুক্ত না করে দ্বিমাত্রিক অঞ্চলে ছড়িয়ে যেতে পারে। তবে 15 বা ততোধিক নামের জন্য, আমার দৃষ্টিতে একটি বার চার্ট শক্তিশালী প্রতিযোগী হিসাবে রয়ে গেছে।

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

গ্রাফটি স্টাটাতে অঙ্কিত হয়েছিল।


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

1
এটি আমার ছাপও, তাই নাম ট্রিপম্যাপ। শ্রেণিবিন্যাসের মাত্র একটি স্তর এখানে সুস্পষ্ট।
নিক কক্স

4
বিল শনিডারম্যান কিছু প্রাসঙ্গিক প্রকাশনাগুলির ( সিএস.এমডি.ইডু / এইচসিিল / ত্রিমা্যাপ-ইতিহাস) লিঙ্ক সহ ট্রিপম্যাপগুলির এক দুর্দান্ত ইতিহাস রেখেছেন । ট্রিম্যাপগুলি প্রাথমিকভাবে ডেনড্রোগ্রাম বা গাছের তুলনায় কম বিশৃঙ্খল উপায়ে মাল্টিলেভ্যাল হায়ারার্কি প্রদর্শন করার উদ্দেশ্যে তৈরি করা হয়েছিল, এবং এগুলি প্রথমে হার্ড ডিস্কের বিষয়বস্তু দেখার জন্য ব্যবহৃত হয়েছিল। আজকাল, অন্যান্য অ্যাপ্লিকেশনগুলির মধ্যে বৃহত ফিলোজিনিটিক্স গাছগুলি (তারা প্রজাতির মধ্যে সম্পর্ক দেখায়) দেখার জন্য ট্রিম্যাপগুলি ব্যবহার করা হয়। আরো উদাহরণের জন্য, এ Shneiderman দ্বারা নিবন্ধ দেখতে perceptualedge.com/articles/b-eye/treemaps.pdf
JTT

ধন্যবাদ; এটি মূল্যবান কিসের জন্য আমি এই বিশেষ ক্ষেত্রে সম্মত।
পিটার এলিস

3

সম্পাদনা / সংযোজন

আমি তখন থেকেই আবিষ্কার করেছি যে ট্রিপম্যাপ প্যাকেজটি নীচে উল্লিখিত (এবং অভিযোজিত) ম্যাপ.মার্কেট () ফাংশনের চেয়ে অনেক ভাল ফলাফল দেয়; তবে আমি আমার উত্তরটি historicalতিহাসিক কারণে ছেড়ে দেব।

আসল উত্তর

উত্তরের জন্য ধন্যবাদ। @ জেটিটি দ্বারা সরবরাহিত প্রবাহিত ডেটা লিঙ্কের উপর ভিত্তি করে তবে কেবল যুক্তিসঙ্গত গ্রাফিক পেতে ইলাস্ট্রেটর বা ইনসক্যাপে হাতে কল করার প্রয়োজনকে অপছন্দ করে আমি জ্যাপ এনোস এবং ডেভিড কেনের পোর্টফোলিও প্যাকেজে ম্যাপ.মার্কেট () ফাংশনটি টুইঙ্ক করেছি it ব্যবহারকারী দ্বারা নিয়ন্ত্রিত, লেবেলগুলি আয়তক্ষেত্রের আকার অনুসারে পরিবর্তিত হয় এবং লাল-সবুজ বিপরীতে এড়ানো যায়। ব্যবহারের উদাহরণ:

library(portfolio)
library(extrafont)
data(dow.jan.2005)

with(dow.jan.2005, 
    treemap(id    = symbol,
        area  = price,
        group = sector,
        color = 100 * month.ret,
        labsc = .12,  # user-chosen scaling of labels 
        fontfamily="Comic Sans MS")
    )

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

এটির মূল্যের জন্য, আমি @ নিককক্সের সাথেও সম্মত হই যে আমার মূল প্রশ্নের উদাহরণে একটি বিন্দু চক্রান্ত উন্নত। আমার অভিযোজিত ট্রিম্যাপ () ফাংশনের কোডটি অনুসরণ করে।

treemap <- function (id, area, group, color, scale = NULL, lab = c(group = TRUE, 
    id = FALSE), low="red", middle="grey60", high="blue", main = "Map of the Market", labsc = c(.5, 1), print = TRUE, ...) 
{
    # Adapted by Peter Ellis from map.market() by Jeff Enos and David Kane in the portfolio package on CRAN
    # See map.market for the original helpfile.  The changes are:
    # 1. low, middle and high are user-set color ramp choices
    # 2. The font size now varies with the area of the rectangle being labelled; labsc is a scaling parameter to make it look ok.
    #    First element of labsc is scaling parameter for size of group labels.  Second element is scaling for id labels.
    # 3. ... extra arguments to be passed to gpar() when drawing labels; expected use is for fontfamily="whatever"
    require(portfolio)
    if (any(length(id) != length(area), length(id) != length(group), 
        length(id) != length(color))) {
        stop("id, area, group, and color must be the same length.")
    }
    if (length(lab) == 1) {
        lab[2] <- lab[1]
    }
    if (missing(id)) {
        id <- seq_along(area)
        lab["id"] <- FALSE
    }
    stopifnot(all(!is.na(id)))
    data <- data.frame(label = id, group, area, color)
    data <- data[order(data$area, decreasing = TRUE), ]
    na.idx <- which(is.na(data$area) | is.na(data$group) | is.na(data$color))
    if (length(na.idx)) {
        warning("Stocks with NAs for area, group, or color will not be shown")
        data <- data[-na.idx, ]
    }
    zero.area.idx <- which(data$area == 0)
    if (length(zero.area.idx)) {
        data <- data[-zero.area.idx, ]
    }
    if (nrow(data) == 0) {
        stop("No records to display")
    }
    data$color.orig <- data$color
    if (is.null(scale)) {
        data$color <- data$color * 1/max(abs(data$color))
    }
    else {
        data$color <- sapply(data$color, function(x) {
            if (x/scale > 1) 
                1
            else if (-1 > x/scale) 
                -1
            else x/scale
        })
    }
    data.by.group <- split(data, data$group, drop = TRUE)
    group.data <- lapply(data.by.group, function(x) {
        sum(x[, 3])
    })
    group.data <- data.frame(area = as.numeric(group.data), label = names(group.data))
    group.data <- group.data[order(group.data$area, decreasing = TRUE), 
        ]
    group.data$color <- rep(NULL, nrow(group.data))
    color.ramp.pos <- colorRamp(c(middle, high))
    color.ramp.neg <- colorRamp(c(middle, low))
    color.ramp.rgb <- function(x) {
        col.mat <- mapply(function(x) {
            if (x < 0) {
                color.ramp.neg(abs(x))
            }
            else {
                color.ramp.pos(abs(x))
            }
        }, x)
        mapply(rgb, col.mat[1, ], col.mat[2, ], col.mat[3, ], 
            max = 255)
    }
    add.viewport <- function(z, label, color, x.0, y.0, x.1, 
        y.1) {
        for (i in 1:length(label)) {
            if (is.null(color[i])) {
                filler <- gpar(col = "blue", fill = "transparent", 
                  cex = 1)
            }
            else {
                filler.col <- color.ramp.rgb(color[i])
                filler <- gpar(col = filler.col, fill = filler.col, 
                  cex = 0.6)
            }
            new.viewport <- viewport(x = x.0[i], y = y.0[i], 
                width = (x.1[i] - x.0[i]), height = (y.1[i] - 
                  y.0[i]), default.units = "npc", just = c("left", 
                  "bottom"), name = as.character(label[i]), clip = "on", 
                gp = filler)
            z <- append(z, list(new.viewport))
        }
        z
    }
    squarified.treemap <- function(z, x = 0, y = 0, w = 1, h = 1, 
        func = add.viewport, viewport.list) {
        cz <- cumsum(z$area)/sum(z$area)
        n <- which.min(abs(log(max(w/h, h/w) * sum(z$area) * 
            ((cz^2)/z$area))))
        more <- n < length(z$area)
        a <- c(0, cz[1:n])/cz[n]
        if (h > w) {
            viewport.list <- func(viewport.list, z$label[1:n], 
                z$color[1:n], x + w * a[1:(length(a) - 1)], rep(y, 
                  n), x + w * a[-1], rep(y + h * cz[n], n))
            if (more) {
                viewport.list <- Recall(z[-(1:n), ], x, y + h * 
                  cz[n], w, h * (1 - cz[n]), func, viewport.list)
            }
        }
        else {
            viewport.list <- func(viewport.list, z$label[1:n], 
                z$color[1:n], rep(x, n), y + h * a[1:(length(a) - 
                  1)], rep(x + w * cz[n], n), y + h * a[-1])
            if (more) {
                viewport.list <- Recall(z[-(1:n), ], x + w * 
                  cz[n], y, w * (1 - cz[n]), h, func, viewport.list)
            }
        }
        viewport.list
    }
    map.viewport <- viewport(x = 0.05, y = 0.05, width = 0.9, 
        height = 0.75, default.units = "npc", name = "MAP", just = c("left", 
            "bottom"))
    map.tree <- gTree(vp = map.viewport, name = "MAP", children = gList(rectGrob(gp = gpar(col = "dark grey"), 
        name = "background")))
    group.viewports <- squarified.treemap(z = group.data, viewport.list = list())
    for (i in 1:length(group.viewports)) {
        this.group <- data.by.group[[group.data$label[i]]]
        this.data <- data.frame(this.group$area, this.group$label, 
            this.group$color)
        names(this.data) <- c("area", "label", "color")
        stock.viewports <- squarified.treemap(z = this.data, 
            viewport.list = list())
        group.tree <- gTree(vp = group.viewports[[i]], name = group.data$label[i])
        for (s in 1:length(stock.viewports)) {
            stock.tree <- gTree(vp = stock.viewports[[s]], name = this.data$label[s], 
                children = gList(rectGrob(name = "color")))
            if (lab[2]) {
                stock.tree <- addGrob(stock.tree, textGrob(x = unit(1, 
                  "lines"), y = unit(1, "npc") - unit(1, "lines"), 
                  label = this.data$label[s], gp = gpar(col = "white", fontsize=this.data$area[s] * labsc[2], ...), 
                  name = "label", just = c("left", "top")))
            }
            group.tree <- addGrob(group.tree, stock.tree)
        }
        group.tree <- addGrob(group.tree, rectGrob(gp = gpar(col = "grey"), 
            name = "border"))
        if (lab[1]) {
            group.tree <- addGrob(group.tree, textGrob(label = group.data$label[i], 
                name = "label", gp = gpar(col = "white", fontsize=group.data$area[i] * labsc[1], ...)))
        }
        map.tree <- addGrob(map.tree, group.tree)
    }
    op <- options(digits = 1)
    top.viewport <- viewport(x = 0.05, y = 1, width = 0.9, height = 0.2, 
        default.units = "npc", name = "TOP", , just = c("left", 
            "top"))
    legend.ncols <- 51
    l.x <- (0:(legend.ncols - 1))/(legend.ncols)
    l.y <- unit(0.25, "npc")
    l.cols <- color.ramp.rgb(seq(-1, 1, by = 2/(legend.ncols - 
        1)))
    if (is.null(scale)) {
        l.end <- max(abs(data$color.orig))
    }
    else {
        l.end <- scale
    }
    top.list <- gList(textGrob(label = main, y = unit(0.7, "npc"), 
        just = c("center", "center"), gp = gpar(cex = 2, ...)), segmentsGrob(x0 = seq(0, 
        1, by = 0.25), y0 = unit(0.25, "npc"), x1 = seq(0, 1, 
        by = 0.25), y1 = unit(0.2, "npc")), rectGrob(x = l.x, 
        y = l.y, width = 1/legend.ncols, height = unit(1, "lines"), 
        just = c("left", "bottom"), gp = gpar(col = NA, fill = l.cols), 
        default.units = "npc"), textGrob(label = format(l.end * 
        seq(-1, 1, by = 0.5), trim = TRUE), x = seq(0, 1, by = 0.25), 
        y = 0.1, default.units = "npc", just = c("center", "center"), 
        gp = gpar(col = "black", cex = 0.8, fontface = "bold")))
    options(op)
    top.tree <- gTree(vp = top.viewport, name = "TOP", children = top.list)
    mapmarket <- gTree(name = "MAPMARKET", children = gList(rectGrob(gp = gpar(col = "dark grey", 
        fill = "dark grey"), name = "background"), top.tree, 
        map.tree))
    if (print) {
        grid.newpage()
        grid.draw(mapmarket)
    }
    invisible(mapmarket)
}

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

1
প্রকৃতপক্ষে আমি এনওস এবং কেনের ম্যাপ.মার্কেটের জন্য সহায়তা ফাইল থেকে উদাহরণটি পেয়েছি। এটিকে প্রতিবিম্বিত করে আমি দেখতে পাচ্ছি না কেন তারা এরিয়া শোয়ের দাম বেছে নিয়েছে; আরও বোধগম্য পদক্ষেপটি হ'ল মোট মূলধনটি দেখাতে হবে অর্থাৎ শেয়ারের দাম x সংখ্যা (বাজারে শেয়ারের সংখ্যা, বা উদ্দেশ্য অনুসারে আমি যে শেয়ারের মালিক তা কেবলমাত্র) show তারপরে আপনার কাছে বিভিন্ন স্টকের গুরুত্ব দেখানোর জন্য প্লটের একটি ভাল স্বজ্ঞাত ব্যবহার হবে।
পিটার এলিস

দামের ব্যবহার দেখে আমিও হতবাক হয়েছি।
নিক কক্স

1

এটি একটি বৃক্ষের মানচিত্র, আপনি এটি টেবিল 8 এবং ফ্রি টেবিল বিনামূল্যে দিয়ে সহজেই করতে পারেন, নমুনাটি এখানে দেখুন: http://www.tableausoftware.com/new-features/new-view-types । আপনি এই এই ইউআরএলটিও দেখতে পাচ্ছেন যে ট্রিম্যাপ বার চার্টের সাথে একত্রিত হতে পারে

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