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
vlines
which defines the vertical lines that should be drawn by default. In this case, the variablesleft_border
andright_border
were 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
hlines
was 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 namedhlines
was added to the structureTextFormat
to defined which horizontal lines should be drawn by default. Thus, the variablestop_line
,header_line
, andbottom_line
of the same structure were removed since they were not necessary anymore. Furthermore, the old behavior ofhlines
andhlines_format
can be replicated in this version usingbody_hlines
andbody_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_vline
was 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)
, wherevalue
is the cell value that must be formatted,i
is the row number, andj
is 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 fromformatter
toformatters
. 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_names
can be used to append a column to the left of the table with the names of the columns. - The
highlighters
format of text back-end was improved. The user can now create highlighters that will dynamically applycrayons
depending on the data value and the cell coordinate, as it was possible with the LaTeX and HTML back-ends. - The API of
cell_alignment
was changed to improve the consistency of the package. Now, as we have inhighlighters
, thecell_alignment
must be a function or a tuple of functions with the signaturef(data,i,j)
, wheredata
is the matrix that is being printed,i
is the row number, andj
is 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!)