Gadfly.jl icon indicating copy to clipboard operation
Gadfly.jl copied to clipboard

Gadfly scaling of figures got very much strange after the latest updates

Open montyvesselinov opened this issue 2 years ago • 36 comments

(@v1.7) pkg> st Gadfly Status C:\Users\monty\.julia\environments\v1.7\Project.toml [c91e804a] Gadfly v1.3.4

(@v1.7) pkg> st Compose Status C:\Users\monty\.julia\environments\v1.7\Project.toml [a81c6b42] Compose v0.9.3

The following produces very weird ouput:

Gadfly.draw(Gadfly.PNG("a.png", 3Gadfly.inch, 3Gadfly.inch), Gadfly.plot(x=rand(10), y=rand(10), Gadfly.Scale.y_sqrt, Gadfly.Geom.point, Gadfly.Guide.xlabel("Time"), Gadfly.Guide.ylabel("Response"), Gadfly.Guide.title("Test")))

a

montyvesselinov avatar May 29 '22 16:05 montyvesselinov

Any suggestions how to fix this?! It is very weird.

montyvesselinov avatar Jun 05 '22 17:06 montyvesselinov

@bjarthur can you help?! thank you!

montyvesselinov avatar Jun 05 '22 17:06 montyvesselinov

not a problem for me:

a

try checking out the master branch of Gadfly and Compose with ]dev Gadfly Compose

bjarthur avatar Jun 11 '22 12:06 bjarthur

Same issue I am having in #1572 and here.

nathanrboyer avatar Jun 16 '22 18:06 nathanrboyer

@bjarthur are there any updates on this. Clearly, Fontconfig causes this problem. Maybe it is only related to Windows machines but it is very annoying and causes many issues. Thank you!

montyvesselinov avatar Jun 22 '22 12:06 montyvesselinov

@bjarthur

things get even worse if manual key is implemented:

Gadfly.draw(Gadfly.PNG("a.png", 3Gadfly.inch, 3Gadfly.inch), Gadfly.plot(x=rand(10), y=rand(10), Gadfly.Scale.y_sqrt, Gadfly.Geom.point, Gadfly.Guide.xlabel(""), Gadfly.Guide.ylabel(""), Gadfly.Guide.title("Test"), Gadfly.Guide.manual_color_key("", ["Truth", "Prediction"], ["red", "blue"]; shape=[Gadfly.Shape.circle, Gadfly.Shape.hline])))

a

montyvesselinov avatar Jun 25 '22 19:06 montyvesselinov

@bjarthur these issues are extremely annoying and create a lof of plotting issues.

montyvesselinov avatar Jun 25 '22 19:06 montyvesselinov

@bjarthur dev versions also do not work and produce the same issues.

montyvesselinov avatar Jun 25 '22 19:06 montyvesselinov

sorry, but how can i help if i can't reproduce? the code is open source. please have a look.

bjarthur avatar Jun 25 '22 20:06 bjarthur

do you have any suggestions where to start? Are there any known issues with Fontconfig for Windows?

montyvesselinov avatar Jun 26 '22 10:06 montyvesselinov

i would guess the bug is in Compose/src/pango.jl somewhere.

bjarthur avatar Jun 26 '22 18:06 bjarthur

@bjarthur

here is another crazy result:

Gadfly.draw(Gadfly.PNG("a.png", 3Gadfly.inch, 3Gadfly.inch), Gadfly.plot(x=1:5000, y=1:5000))

a

montyvesselinov avatar Jun 27 '22 11:06 montyvesselinov

I guess there is an issue with font rendering. The code incorrectly predicts the size of the axis titles and labels. It is especially pronounced if superscripts are invoked.

montyvesselinov avatar Jun 27 '22 11:06 montyvesselinov

Where in the code the size of generated labels is processed?

Do you have tests in Compose about the size of generated text?

montyvesselinov avatar Jun 27 '22 12:06 montyvesselinov

Compose tests fail on windows:

               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.7.3 (2022-05-06)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

(@v1.7) pkg> test Compose
     Testing Compose
      Status `C:\Users\monty\AppData\Local\Temp\jl_fQZIAA\Project.toml`
  [159f3aea] Cairo v1.0.5
  [5ae59095] Colors v0.12.8
  [a81c6b42] Compose v0.9.3
  [864edb3b] DataStructures v0.18.13
  [8f5d6c58] EzXML v1.1.0
  [186bb1d3] Fontconfig v0.4.0
  [c8e1da08] IterTools v1.4.0
  [682c06a0] JSON v0.21.3
  [442fdcdd] Measures v0.3.1
  [ae029012] Requires v1.3.0
  [2a0f44e3] Base64 `@stdlib/Base64`
  [ade2ca70] Dates `@stdlib/Dates`
  [37e2e46d] LinearAlgebra `@stdlib/LinearAlgebra`
  [de0858da] Printf `@stdlib/Printf`
  [9a3f8284] Random `@stdlib/Random`
  [10745b16] Statistics `@stdlib/Statistics`
  [8dfed614] Test `@stdlib/Test`
  [cf7118a7] UUIDs `@stdlib/UUIDs`
      Status `C:\Users\monty\AppData\Local\Temp\jl_fQZIAA\Manifest.toml`
  [159f3aea] Cairo v1.0.5
  [3da002f7] ColorTypes v0.11.4
  [5ae59095] Colors v0.12.8
  [34da2185] Compat v3.45.0
  [a81c6b42] Compose v0.9.3
  [864edb3b] DataStructures v0.18.13
  [8f5d6c58] EzXML v1.1.0
  [53c48c17] FixedPointNumbers v0.8.4
  [186bb1d3] Fontconfig v0.4.0
  [a2bd30eb] Graphics v1.1.2
  [c8e1da08] IterTools v1.4.0
  [692b3bcd] JLLWrappers v1.4.1
  [682c06a0] JSON v0.21.3
  [442fdcdd] Measures v0.3.1
  [77ba4419] NaNMath v0.3.7
  [bac558e1] OrderedCollections v1.4.1
  [69de0a69] Parsers v2.3.2
  [21216c6a] Preferences v1.3.0
  [189a3867] Reexport v1.2.2
  [ae029012] Requires v1.3.0
  [6e34b625] Bzip2_jll v1.0.8+0
  [83423d85] Cairo_jll v1.16.1+1
  [2e619515] Expat_jll v2.4.8+0
  [a3f928ae] Fontconfig_jll v2.13.93+0
  [d7e528f0] FreeType2_jll v2.10.4+0
  [559328eb] FriBidi_jll v1.0.10+0
  [78b55507] Gettext_jll v0.21.0+0
  [7746bdde] Glib_jll v2.68.3+2
  [3b182d85] Graphite2_jll v1.3.14+0
  [2e76f6c2] HarfBuzz_jll v2.8.1+1
  [dd4b983a] LZO_jll v2.10.1+0
  [e9f186c6] Libffi_jll v3.2.2+1
  [d4300ac3] Libgcrypt_jll v1.8.7+0
  [7add5ba3] Libgpg_error_jll v1.42.0+0
  [94ce4f54] Libiconv_jll v1.16.1+1
  [4b2f31a3] Libmount_jll v2.35.0+0
  [38a345b3] Libuuid_jll v2.36.0+0
  [2f80f16e] PCRE_jll v8.44.0+0
  [36c8627f] Pango_jll v1.50.3+0
  [30392449] Pixman_jll v0.40.1+0
  [02c8fc9c] XML2_jll v2.9.14+0
  [aed1982a] XSLT_jll v1.1.34+0
  [4f6342f7] Xorg_libX11_jll v1.6.9+4
  [0c0b7dd1] Xorg_libXau_jll v1.0.9+4
  [a3789734] Xorg_libXdmcp_jll v1.1.3+4
  [1082639a] Xorg_libXext_jll v1.3.4+4
  [ea2f1a96] Xorg_libXrender_jll v0.9.10+4
  [14d82f49] Xorg_libpthread_stubs_jll v0.1.0+3
  [c7cfdc94] Xorg_libxcb_jll v1.13.0+3
  [c5fb5394] Xorg_xtrans_jll v1.4.0+3
  [b53b4c65] libpng_jll v1.6.38+0
  [0dad84c5] ArgTools `@stdlib/ArgTools`
  [56f22d72] Artifacts `@stdlib/Artifacts`
  [2a0f44e3] Base64 `@stdlib/Base64`
  [ade2ca70] Dates `@stdlib/Dates`
  [8bb1440f] DelimitedFiles `@stdlib/DelimitedFiles`
  [8ba89e20] Distributed `@stdlib/Distributed`
  [f43a241f] Downloads `@stdlib/Downloads`
  [7b1f6079] FileWatching `@stdlib/FileWatching`
  [b77e0a4c] InteractiveUtils `@stdlib/InteractiveUtils`
  [b27032c2] LibCURL `@stdlib/LibCURL`
  [76f85450] LibGit2 `@stdlib/LibGit2`
  [8f399da3] Libdl `@stdlib/Libdl`
  [37e2e46d] LinearAlgebra `@stdlib/LinearAlgebra`
  [56ddb016] Logging `@stdlib/Logging`
  [d6f4376e] Markdown `@stdlib/Markdown`
  [a63ad114] Mmap `@stdlib/Mmap`
  [ca575930] NetworkOptions `@stdlib/NetworkOptions`
  [44cfe95a] Pkg `@stdlib/Pkg`
  [de0858da] Printf `@stdlib/Printf`
  [3fa0cd96] REPL `@stdlib/REPL`
  [9a3f8284] Random `@stdlib/Random`
  [ea8e919c] SHA `@stdlib/SHA`
  [9e88b42a] Serialization `@stdlib/Serialization`
  [1a1011a3] SharedArrays `@stdlib/SharedArrays`
  [6462fe0b] Sockets `@stdlib/Sockets`
  [2f01184e] SparseArrays `@stdlib/SparseArrays`
  [10745b16] Statistics `@stdlib/Statistics`
  [fa267f1f] TOML `@stdlib/TOML`
  [a4e569a6] Tar `@stdlib/Tar`
  [8dfed614] Test `@stdlib/Test`
  [cf7118a7] UUIDs `@stdlib/UUIDs`
  [4ec0a83e] Unicode `@stdlib/Unicode`
  [e66e0078] CompilerSupportLibraries_jll `@stdlib/CompilerSupportLibraries_jll`
  [deac9b47] LibCURL_jll `@stdlib/LibCURL_jll`
  [29816b5a] LibSSH2_jll `@stdlib/LibSSH2_jll`
  [c8ffd9c3] MbedTLS_jll `@stdlib/MbedTLS_jll`
  [14a3606d] MozillaCACerts_jll `@stdlib/MozillaCACerts_jll`
  [4536629a] OpenBLAS_jll `@stdlib/OpenBLAS_jll`
  [83775a58] Zlib_jll `@stdlib/Zlib_jll`
  [8e850b90] libblastrampoline_jll `@stdlib/libblastrampoline_jll`
  [8e850ede] nghttp2_jll `@stdlib/nghttp2_jll`
  [3f19e933] p7zip_jll `@stdlib/p7zip_jll`
     Testing Running tests...
Test Summary:        | Pass  Total
missing cairo errors |    6      6
table: Test Failed at C:\Users\monty\.julia\packages\Compose\h4MDD\test\misc.jl:48
  Expression: replace(str, " " => "") == "Compose.Table($(Vector{Context})[[]],3:3,1:1,nothing,nothing,1.6,Any[],nothing,0,false,false)"
   Evaluated: "Compose.Table(Vector{Context}[[];;],3:3,1:1,nothing,nothing,1.6,Any[],nothing,0,false,false)" == "Compose.Table(Vector{Context}[[]],3:3,1:1,nothing,nothing,1.6,Any[],nothing,0,false,false)"
Stacktrace:
 [1] macro expansion
   @ C:\Users\monty\AppData\Local\Programs\Julia-1.7.3\share\julia\stdlib\v1.7\Test\src\Test.jl:445 [inlined]
 [2] macro expansion
   @ C:\Users\monty\.julia\packages\Compose\h4MDD\test\misc.jl:48 [inlined]
 [3] macro expansion
   @ C:\Users\monty\AppData\Local\Programs\Julia-1.7.3\share\julia\stdlib\v1.7\Test\src\Test.jl:1283 [inlined]
 [4] macro expansion
   @ C:\Users\monty\.julia\packages\Compose\h4MDD\test\misc.jl:37 [inlined]
 [5] macro expansion
   @ C:\Users\monty\AppData\Local\Programs\Julia-1.7.3\share\julia\stdlib\v1.7\Test\src\Test.jl:1283 [inlined]
 [6] top-level scope
   @ C:\Users\monty\.julia\packages\Compose\h4MDD\test\misc.jl:20
Test Summary: | Pass  Fail  Total
printing      |    3     1      4
  context     |    2            2
  table       |    1     1      2
ERROR: LoadError: Some tests did not pass: 3 passed, 1 failed, 0 errored, 0 broken.
in expression starting at C:\Users\monty\.julia\packages\Compose\h4MDD\test\misc.jl:19
in expression starting at C:\Users\monty\.julia\packages\Compose\h4MDD\test\runtests.jl:3
ERROR: Package Compose errored during testing

montyvesselinov avatar Jun 27 '22 12:06 montyvesselinov

what exactly is crazy? your post is blank. i see:

Gadfly.plot(x=1:5000, y=1:5000)

Screen Shot 2022-07-04 at 4 54 52 PM

Gadfly.plot(x=1:5000, y=1:5000, Theme(highlight_width=0mm))

Screen Shot 2022-07-04 at 4 54 59 PM

in the former, the blue interior is being hidden by the white outlines.

bjarthur avatar Jul 04 '22 20:07 bjarthur

Compose tests should pass once https://github.com/JuliaRegistries/General/pull/63655 is merged. this was fixed awhile back. when reporting errors, please first checkout the master branch to confirm they still exist.

bjarthur avatar Jul 04 '22 20:07 bjarthur

the Compose.jl code i linked above defines max_text_extents. a quick search in Gadfly shows it is used throughout guide.jl. e.g. https://github.com/GiovineItalia/Gadfly.jl/blob/master/src/guide.jl#L872-L874

bjarthur avatar Jul 04 '22 21:07 bjarthur

JuliaGraphics/Cairo.jl#349: is this related?

Mattriks avatar Jul 04 '22 23:07 Mattriks

@Mattriks https://github.com/JuliaGraphics/Cairo.jl/issues/349 might be related. But this is potentially not the only problem. Definitely, there are issues with Gadfly/Compose when the font sizes are less than 1 pt. I have observed this as well in the past.

montyvesselinov avatar Jul 05 '22 14:07 montyvesselinov

Gadfly.plot(x=1:5000, y=1:5000)

produces

image

The svg file is attached

plot_1

as you can see the axis labeling is crazy. the location of the axis titles are crazy.

montyvesselinov avatar Jul 05 '22 14:07 montyvesselinov

@bjarthur I am also not sure why the axes got flipped?!

montyvesselinov avatar Jul 05 '22 14:07 montyvesselinov

@Mattriks maybe the small fonts used for the superscripts in the figure below create this crazy behavior. However, note here I create SVG file which I do not think uses Cairo.

montyvesselinov avatar Jul 05 '22 14:07 montyvesselinov

The nbsp error in svg is different, and has been reported elsewhere (google it).

Mattriks avatar Jul 05 '22 15:07 Mattriks

i am not worried about nbsp error @Mattriks . The problem is that figure is weird. Upside down. and crazy titles

montyvesselinov avatar Jul 05 '22 17:07 montyvesselinov

Did you check if pinning Pango_jll to an earlier version fixes it? ]pin [email protected] Your Compose test above shows you have Pango_jll v1.50.3

Mattriks avatar Jul 05 '22 18:07 Mattriks

@Mattriks Excellent suggestion! Both [email protected] and [email protected] work and the problem is fixed. I am fine to stick with an old version of Pango for the moment. However, it will be nice if this issue gets fixed soon or later. Thank you!

montyvesselinov avatar Jul 05 '22 19:07 montyvesselinov

[email protected] did not work for me, but [email protected] did.

nathanrboyer avatar Jul 06 '22 15:07 nathanrboyer

I agree

I confirm with additional testing that [email protected] is needed. However, [email protected] and [email protected] fail!

]pin [email protected]

montyvesselinov avatar Jul 07 '22 15:07 montyvesselinov

However, I hope the Gadfly/Compose gets fixed to work with the latest Pango_jll

montyvesselinov avatar Jul 07 '22 15:07 montyvesselinov

But this issue doesn't seem to affect MacOS or Linux users, so not easy to fix.

Mattriks avatar Jul 07 '22 23:07 Mattriks