Hi!
I have just tagged a new release of PrettyTables.jl - it should be registered soon. This modifies a lot of things and, unfortunately, breaks a lot of things⦠This was necessary because the package became much bigger than I thought initially. Thus, I had to improve the consistency by throwing away bad choices ![]()
The entire changelog is:
- The table format of the text back-end now has the variable
vlineswhich defines the vertical lines that should be drawn by default. In this case, the variablesleft_borderandright_borderwere removed because they were not necessary anymore. - The compatibility with Tables.jl API was improved. Now, tables without a schema can be printed. Furthermore, if a table has a schema but the user pass a header, then the userβs header will be used instead. Thus, this can be breaking. (Issue [#45][gh-issue-45])
- The behavior of the keyword
hlineswas modified in text back-end. Now, it can be used to draw any horizontal line, including the bottom, header, and top lines. A variable also namedhlineswas added to the structureTextFormatto defined which horizontal lines should be drawn by default. Thus, the variablestop_line,header_line, andbottom_lineof the same structure were removed since they were not necessary anymore. Furthermore, the old behavior ofhlinesandhlines_formatcan be replicated in this version usingbody_hlinesandbody_hlines_format, respectively. - The vertical lines behavior in LaTeX back-end was modified to match the behavior selected for the text back-end. Thus, the keyword
row_number_vlinewas removed, since it was not necessary anymore. - The API of formatters was drastically change to improve the consistency of the package. Now, as we have in
highlighters, the formatters are composed of a function or a tuple of functions with the signaturef(value,i,j), wherevalueis the cell value that must be formatted,iis the row number, andjis the column number. These function must return the formatted value for the cell(i,j). Since it is now possible to define multiple formatters, the keyword name was changed fromformattertoformatters. The old API still works, but it marked as deprecated. - The vertical lines in text back-end can now be controlled by the keyword
vlines. (Issue [#46][gh-issue-46]) - The option
row_namescan be used to append a column to the left of the table with the names of the columns. - The
highlightersformat of text back-end was improved. The user can now create highlighters that will dynamically applycrayonsdepending on the data value and the cell coordinate, as it was possible with the LaTeX and HTML back-ends. - The API of
cell_alignmentwas changed to improve the consistency of the package. Now, as we have inhighlighters, thecell_alignmentmust be a function or a tuple of functions with the signaturef(data,i,j), wheredatais the matrix that is being printed,iis the row number, andjis the column number. These function must return the alignment symbol for the cell(i,j). For convenience, the old API using dictionaries is still available for the simple cases. - End of support of Julia 1.3. The supported versions are 1.0 and 1.4.
Thus, with this new version, it is very easy to format table lines in text backend. I saw a lot of people creating custom formats just to remove a line, which seems bad. Thus, letβs say you want to print something without any horizontal line:
julia> data = ["Set 1" 1 2 3 4 5
"Set 2" 3 4 5 2 5
"Set 3" 5 6 8 1 2];
julia> pretty_table(data, ["Set" "1st" "2nd" "3rd" "4th" "5th"], hlines = :none)
β Set β 1st β 2nd β 3rd β 4th β 5th β
β Set 1 β 1 β 2 β 3 β 4 β 5 β
β Set 2 β 3 β 4 β 5 β 2 β 5 β
β Set 3 β 5 β 6 β 8 β 1 β 2 β
Or, maybe, with just the header line:
julia> pretty_table(data, ["Set" "1st" "2nd" "3rd" "4th" "5th"], hlines = [:header])
β Set β 1st β 2nd β 3rd β 4th β 5th β
βββββββββΌββββββΌββββββΌββββββΌββββββΌββββββ€
β Set 1 β 1 β 2 β 3 β 4 β 5 β
β Set 2 β 3 β 4 β 5 β 2 β 5 β
β Set 3 β 5 β 6 β 8 β 1 β 2 β
The same can be done for the vertical lines:
julia> pretty_table(data, ["Set" "1st" "2nd" "3rd" "4th" "5th"], hlines = [:header], vlines = :none)
Set 1st 2nd 3rd 4th 5th
ββββββββββββββββββββββββββββββββββββββ
Set 1 1 2 3 4 5
Set 2 3 4 5 2 5
Set 3 5 6 8 1 2
julia> pretty_table(data, ["Set" "1st" "2nd" "3rd" "4th" "5th"], hlines = [:header], vlines = [:begin,1,:end])
β Set β 1st 2nd 3rd 4th 5th β
βββββββββΌββββββββββββββββββββββββββββββ€
β Set 1 β 1 2 3 4 5 β
β Set 2 β 3 4 5 2 5 β
β Set 3 β 5 6 8 1 2 β
The highlighters in text back-end can now be dynamically selected based on the data set. Hence, we can now select the text color based on the cell value. Using the package ColorScheme.jl, it is now possible to do this:
julia> using PrettyTables
julia> using ColorSchemes
julia> data = [ sind(x)*cosd(y) for x in 0:10:180, y in 0:10:180 ]
julia> hl = Highlighter((data,i,j)->true,
(h,data,i,j)->begin
color = get(colorschemes[:coolwarm], data[i,j], (-1,1))
return Crayon(foreground = (round(Int,color.r*255),
round(Int,color.g*255),
round(Int,color.b*255)))
end)
julia> pretty_table(data, ["x = $(x)Β°" for x = 0:10:180],
row_names = ["y = $(y)Β°" for y = 0:10:180],
highlighters = hl,
formatters = ft_printf("%.2f"))
(For this case, your terminal must support 24bit colors!)
