如何在Julia'中按升序或降序对条形图排序;牛虻是什么?(有人知道一种不那么老套的方法吗?)

如何在Julia'中按升序或降序对条形图排序;牛虻是什么?(有人知道一种不那么老套的方法吗?),julia,gadfly,Julia,Gadfly,我已经做了一个计数样式df的dict来制作一个条形图,我感兴趣的是按大小降序排列这些条形图。在R世界里,我会做一些类似的事情,并且想知道1)这是一种多么整洁的方式,2)如果牛虻身上也有类似的东西。我的技巧是: using DataFrames using DataStructures using Gadfly # test data list = ["E", "E", "E", "E", "E"

我已经做了一个计数样式df的dict来制作一个条形图,我感兴趣的是按大小降序排列这些条形图。在R世界里,我会做一些类似的事情,并且想知道1)这是一种多么整洁的方式,2)如果牛虻身上也有类似的东西。

我的技巧是:

using DataFrames
using DataStructures
using Gadfly

# test data
list = ["E", "E", "E", "E", "E",
        "B", "B", "B", "B",
        "C", "C", "C",
        "D", "D", "D",
        "A"]

# I am making a dict-of-counts to turn into a df
# empty string->int dict
countsDict = Dict{String,Integer}()

# a function to count occurences of a given string in an array
function countStrInArray(str::String, arr::Array{String,1})::Integer
    findall(x -> x == str, arr) |> length
end

# for every item in the list 
for item in list
    # if we don't have it in the dict, add, with count as value
    if !haskey(countsDict, item)
        countsDict[item] = countStrInArray(item, list)
    end
end

# this gives me the structure I want but I lose 'lookup' functionality
sortedTuples = sort(collect(zip(values(countsDict),
                    keys(countsDict))), rev = true)

# ...so I creaated an order-preserving dict
sortedCountsDict = OrderedDict{String,Integer}()

# map our tuples to it
for item in sortedTuples
    sortedCountsDict[item[2]] = item[1]
end

# make it into a dataframe
df = DataFrame(group = [i for i in keys(sortedCountsDict)],
               count = [i for i in values(sortedCountsDict)])
# plot it!
plot(df, x = :group, y = :count, Geom.bar) |> SVG("HackyButWorks.svg")
有人知道更干净的方法吗

df = DataFrame(
list = ["E", "E", "E", "E", "E","B", "B", "B", "B",
    "C", "C", "C", "D", "D", "D","A"]
)


p1 = plot(df, x=:list, Geom.histogram)
p2 = plot(df, x=:list, Geom.histogram,  Scale.x_discrete(levels=["A","D","C","B","E"]) )


Aha!当我阅读文档时,我错过了
levels
参数。看起来我可以把我分类的dict的键直接传递给它,避免所有其他的df。谢谢:)